Import a export databáze: Porovnání verzí

Z Freenetis Wiki
Přejít na: navigace, hledání
(Založena nová stránka: Při vývoji je často potřebovat s daty ostré databáze. Prázdná databáze po instalaci pro mnoho testování nestačí. == Import dat do databáze == Import SQL so...)
 
m (Quimi přesunul stránku Import a export databáze na Import a export databáze bez založení přesměrování)
 
(Není zobrazeno 19 mezilehlých verzí od 5 dalších uživatelů.)
Řádek 1: Řádek 1:
 
+
[[en:Import and export of database]]
Při vývoji je často potřebovat s daty ostré databáze. Prázdná databáze po instalaci pro mnoho testování nestačí.
+
[[ru:Импорт и экспорт базы данных]]
 +
Při vývoji je často potřeba pracovat s daty ostré databáze. Prázdná databáze po instalaci pro mnoho testování nestačí.
  
 
== Import dat do databáze ==
 
== Import dat do databáze ==
  
Import SQL souboru s obsahem databáze je možné přes uživatelské rozhraní phpmyadmina. Velké soubory pak ale často narazí na časový a datový limit PHP. Tyto limity je možné do jisté míry měnit v souboru
+
Import SQL souboru s obsahem databáze je možné přes uživatelské rozhraní Phpmyadmina. Velké soubory pak ale často narazí na časový a datový limit PHP. Tyto limity je možné do jisté míry měnit v souboru
  
 
  /etc/php5/apache2/php.ini
 
  /etc/php5/apache2/php.ini
Řádek 10: Řádek 11:
 
U velkých souborů toto nemusí stačit. Proto je snadné použití příkazové řádky. Stačí mít na počítači nekomprimovaný soubor SQL s daty k importu. Je potřeba mít na cílovém MySQL serveru prázdnou databázi. Pro import pak stačí v konzoli napsat
 
U velkých souborů toto nemusí stačit. Proto je snadné použití příkazové řádky. Stačí mít na počítači nekomprimovaný soubor SQL s daty k importu. Je potřeba mít na cílovém MySQL serveru prázdnou databázi. Pro import pak stačí v konzoli napsat
  
  mysql -u username -p databasename < database.sql
+
  mysql -u username -p freenetis < freenetis.sql
 +
 
 +
Po importu databáze je nutné v Phpmyadminovi upravit některé položky v tabulce config. Jde o položky
 +
* protocol (na svém PC pro vývoj používáte typicky http místo https)
 +
* domain (na svém PC pro vývoj máte doménu localhost místo třeba freenetis.sdruzeni.net)
 +
* suffix (přípona za doménou, na serveru je to obvykle pouze /, pro localhost to je obvykle /freenetis/, záleží na vašem nastavení virtualhostu v Apachi)
 +
Jestliže nenaběhne FreenetIS na vaší lokální stránce (typicky localhost/freenetis) kvůli selhání upgradu databáze, pak navštivte v phpmyadminu tabulku config a upravte položku db_schema_version na číslo verze, které najdete v souboru application/upgrade_sql/upgrade_sql.php.
 +
Jestliže přihlašovací stránka naběhne, ale přihlášení selže na neznámé chybě, pak ověřte, jestli se celý import dat provedl správně. V případě větší databáze se import nemusí provést správně a některé tabulky se nestihnou vytvořit, například tabulka users klíčová pro přihlášení. V tomto případě používejte import výhradně přes příkazovou řádku a nikoli přes webové rozhraní phpmyadmina.
 +
 
 +
=== Tip ===
 +
Po importu pusťte v phpmyadminovi následující SQL dotaz
 +
update users, (select password as newpass from users where login='vaslogin') u set password = u.newpass
 +
Můžete tak snadněji testovat práva, protože takto všem uživatelům nastavíte vaše heslo podle vašeho loginu.
 +
 
 +
=== Tip ===
 +
Výsledný SQL dotaz po importu databáze s produkčními daty na lokální vývojářský počítač:
 +
update config set value = 'http' where name = 'protocol';
 +
update config set value = 'localhost' where name = 'domain';
 +
update config set value = '/freenetis/' where name = 'suffix';
 +
update users, (select password as newpass from users where login='vaslogin') u set password = u.newpass
 +
 
 +
== Export dat z databáze ==
 +
 
 +
V příkazové řádce se pak export databáze do souboru provede obdobně:
 +
 
 +
mysqldump -u username -p freenetis --routines > freenetis.sql
 +
 
 +
== Skript All in one ==
 +
 
 +
Následující skript provádí víceméně vše předchozí automaticky za vás. Stačí jenom správně nastavit proměnné, zajít si na kávu a po návratu je váš lokální počítač připraven.
 +
 
 +
#!/bin/bash
 +
 +
############################################################################################
 +
#                                                                                          #
 +
#  Autor: Michal Kliment                                                                  #
 +
#  Popis: Tento skript umoznuje vyvojarum FreenetISu snadnejsi import databaze z jejich  #
 +
#          ostre instalace FreenetISu na jejich lokalni pocitac.                          #
 +
#                                                                                          #
 +
#  Datum: 26. 7. 2011                                                                    #
 +
#                                                                                          #
 +
############################################################################################
 +
 +
############################################################################################
 +
#      N A S T A V E N I  L O K A L N I  I N S T A L A C E  F R E E N E T I S U        #
 +
############################################################################################
 +
 +
# Nazev lokalni databaze
 +
LOCAL_DB_NAME="freenetis"
 +
# Uzivatel lokalni databaze
 +
LOCAL_DB_USER="freenetis"
 +
# Heslo k lokalni databazi
 +
LOCAL_DB_PASSWORD="freenetis"
 +
 +
# Protokol lokalniho freenetisu, http nebo htts
 +
PROTOCOL="http"
 +
# Domena lokalniho freenetis, pravdepodobne localhost
 +
DOMAIN="localhost"
 +
# Pripona adresy lokalniho freenetisu, pravdepodobne /freenetis/
 +
SUFFIX="/freenetis/"
 +
# Uzivatel freenetisu, jehoz heslo se nastavi vsem uzivatelum v systemu
 +
USER_LOGIN="admin"
 +
 +
############################################################################################
 +
#      N A S T A V E N I  "O S T R E"  I N S T A L A C E  F R E E N E T I S U            #
 +
############################################################################################
 +
 +
# Nazev "ostre" databaze
 +
REMOTE_DB_NAME="freenetis"
 +
# Uzivatel "ostre" databaze
 +
REMOTE_DB_USER="freenetis"
 +
# Heslo k "ostre" databazi
 +
REMOTE_DB_PASSWORD="freenetis"
 +
 +
# Uzivatel pro pristup na "ostry" freenetis pres SSH
 +
REMOTE_USER="root"
 +
# Adresa "ostreho" freenetisu pro SSH
 +
REMOTE_HOST="host"
 +
 +
############################################################################################
 +
#                    S A M O T N Y  S K R I P T  -  N E M E N I T !                    #
 +
############################################################################################
 +
 +
echo "Vytvarim zalohu lokalni databaze $LOCAL_DB_NAME..."
 +
mysqldump -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME --routines > freenetis-backup-`date +%Y%m%d%H%M`.sql 2>/dev/null
 +
 +
echo "Odstranuji lokalni databazi $LOCAL_DB_NAME..."
 +
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD -e "DROP DATABASE $LOCAL_DB_NAME;"
 +
 +
echo "Vytvarim novou prazdnou databazi $LOCAL_DB_NAME..."
 +
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD -e "CREATE DATABASE $LOCAL_DB_NAME DEFAULT CHARACTER SET utf8 COLLATE utf8_czech_ci;"
 +
 +
echo "Importuji do ni data primo z ostre databaze, tato operace chvili potrva..."
 +
ssh $REMOTE_USER@$REMOTE_HOST "mysqldump -u $REMOTE_DB_USER --password=$REMOTE_DB_PASSWORD $REMOTE_DB_NAME --routines" | mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME
 +
 +
echo "Nastavuji protokol na $PROTOCOL..."
 +
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME -e "update config set value = '$PROTOCOL' where name = 'protocol';"
 +
 +
echo "Nastavuji domenu na $DOMAIN..."
 +
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME -e "update config set value = '$DOMAIN' where name = 'domain';"
 +
 +
echo "Nastavuji suffic na $SUFFIX..."
 +
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME -e "update config set value = '$SUFFIX' where name = 'suffix';"
 +
 +
echo "Nastavuji vsem uzivatelum stejne heslo jako je heslo pro uzivatele $USER_LOGIN..."
 +
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME -e "update users, (select password as newpass from users where login='$USER_LOGIN') u set password = u.newpass"
 +
 +
echo "Vyprazdnuji e-mailovou frontu..."
 +
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME -e "TRUNCATE TABLE  email_queues;"

Aktuální verze z 31. 1. 2018, 14:07

Při vývoji je často potřeba pracovat s daty ostré databáze. Prázdná databáze po instalaci pro mnoho testování nestačí.

Import dat do databáze

Import SQL souboru s obsahem databáze je možné přes uživatelské rozhraní Phpmyadmina. Velké soubory pak ale často narazí na časový a datový limit PHP. Tyto limity je možné do jisté míry měnit v souboru

/etc/php5/apache2/php.ini

U velkých souborů toto nemusí stačit. Proto je snadné použití příkazové řádky. Stačí mít na počítači nekomprimovaný soubor SQL s daty k importu. Je potřeba mít na cílovém MySQL serveru prázdnou databázi. Pro import pak stačí v konzoli napsat

mysql -u username -p freenetis < freenetis.sql

Po importu databáze je nutné v Phpmyadminovi upravit některé položky v tabulce config. Jde o položky

  • protocol (na svém PC pro vývoj používáte typicky http místo https)
  • domain (na svém PC pro vývoj máte doménu localhost místo třeba freenetis.sdruzeni.net)
  • suffix (přípona za doménou, na serveru je to obvykle pouze /, pro localhost to je obvykle /freenetis/, záleží na vašem nastavení virtualhostu v Apachi)

Jestliže nenaběhne FreenetIS na vaší lokální stránce (typicky localhost/freenetis) kvůli selhání upgradu databáze, pak navštivte v phpmyadminu tabulku config a upravte položku db_schema_version na číslo verze, které najdete v souboru application/upgrade_sql/upgrade_sql.php. Jestliže přihlašovací stránka naběhne, ale přihlášení selže na neznámé chybě, pak ověřte, jestli se celý import dat provedl správně. V případě větší databáze se import nemusí provést správně a některé tabulky se nestihnou vytvořit, například tabulka users klíčová pro přihlášení. V tomto případě používejte import výhradně přes příkazovou řádku a nikoli přes webové rozhraní phpmyadmina.

Tip

Po importu pusťte v phpmyadminovi následující SQL dotaz

update users, (select password as newpass from users where login='vaslogin') u set password = u.newpass

Můžete tak snadněji testovat práva, protože takto všem uživatelům nastavíte vaše heslo podle vašeho loginu.

Tip

Výsledný SQL dotaz po importu databáze s produkčními daty na lokální vývojářský počítač:

update config set value = 'http' where name = 'protocol';
update config set value = 'localhost' where name = 'domain';
update config set value = '/freenetis/' where name = 'suffix';
update users, (select password as newpass from users where login='vaslogin') u set password = u.newpass

Export dat z databáze

V příkazové řádce se pak export databáze do souboru provede obdobně:

mysqldump -u username -p freenetis --routines > freenetis.sql

Skript All in one

Následující skript provádí víceméně vše předchozí automaticky za vás. Stačí jenom správně nastavit proměnné, zajít si na kávu a po návratu je váš lokální počítač připraven.

#!/bin/bash

############################################################################################
#                                                                                          #
#   Autor: Michal Kliment                                                                  #
#   Popis: Tento skript umoznuje vyvojarum FreenetISu snadnejsi import databaze z jejich   # 
#          ostre instalace FreenetISu na jejich lokalni pocitac.                           #
#                                                                                          #
#   Datum: 26. 7. 2011                                                                     #
#                                                                                          #
############################################################################################

############################################################################################
#      N A S T A V E N I   L O K A L N I   I N S T A L A C E   F R E E N E T I S U         #
############################################################################################

# Nazev lokalni databaze
LOCAL_DB_NAME="freenetis"
# Uzivatel lokalni databaze
LOCAL_DB_USER="freenetis"
# Heslo k lokalni databazi
LOCAL_DB_PASSWORD="freenetis"

# Protokol lokalniho freenetisu, http nebo htts
PROTOCOL="http"
# Domena lokalniho freenetis, pravdepodobne localhost
DOMAIN="localhost"
# Pripona adresy lokalniho freenetisu, pravdepodobne /freenetis/
SUFFIX="/freenetis/"
# Uzivatel freenetisu, jehoz heslo se nastavi vsem uzivatelum v systemu
USER_LOGIN="admin"

############################################################################################
#      N A S T A V E N I   "O S T R E"  I N S T A L A C E   F R E E N E T I S U            #
############################################################################################

# Nazev "ostre" databaze
REMOTE_DB_NAME="freenetis"
# Uzivatel "ostre" databaze
REMOTE_DB_USER="freenetis"
# Heslo k "ostre" databazi
REMOTE_DB_PASSWORD="freenetis"

# Uzivatel pro pristup na "ostry" freenetis pres SSH
REMOTE_USER="root"
# Adresa "ostreho" freenetisu pro SSH
REMOTE_HOST="host"

############################################################################################
#                    S A M O T N Y   S K R I P T   -   N E M E N I T !                     #
############################################################################################

echo "Vytvarim zalohu lokalni databaze $LOCAL_DB_NAME..."
mysqldump -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME --routines > freenetis-backup-`date +%Y%m%d%H%M`.sql 2>/dev/null

echo "Odstranuji lokalni databazi $LOCAL_DB_NAME..."
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD -e "DROP DATABASE $LOCAL_DB_NAME;"

echo "Vytvarim novou prazdnou databazi $LOCAL_DB_NAME..."
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD -e "CREATE DATABASE $LOCAL_DB_NAME DEFAULT CHARACTER SET utf8 COLLATE utf8_czech_ci;"

echo "Importuji do ni data primo z ostre databaze, tato operace chvili potrva..."
ssh $REMOTE_USER@$REMOTE_HOST "mysqldump -u $REMOTE_DB_USER --password=$REMOTE_DB_PASSWORD $REMOTE_DB_NAME --routines" | mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME

echo "Nastavuji protokol na $PROTOCOL..."
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME -e "update config set value = '$PROTOCOL' where name = 'protocol';"

echo "Nastavuji domenu na $DOMAIN..."
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME -e "update config set value = '$DOMAIN' where name = 'domain';"

echo "Nastavuji suffic na $SUFFIX..."
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME -e "update config set value = '$SUFFIX' where name = 'suffix';"

echo "Nastavuji vsem uzivatelum stejne heslo jako je heslo pro uzivatele $USER_LOGIN..."
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME -e "update users, (select password as newpass from users where login='$USER_LOGIN') u set password = u.newpass"

echo "Vyprazdnuji e-mailovou frontu..."
mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB_NAME -e "TRUNCATE TABLE  email_queues;"