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

Z Freenetis Wiki
Přejít na: navigace, hledání
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 9 mezilehlých verzí od 5 dalších uživatelů.)
Řádek 1: Řádek 1:
 +
[[en:Import and export of database]]
 +
[[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čí.
 
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čí.
  
Řádek 15: Řádek 17:
 
* domain (na svém PC pro vývoj máte doménu localhost místo třeba freenetis.sdruzeni.net)
 
* 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)
 
* 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 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.
 
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.
  
Řádek 22: Řádek 24:
 
  update users, (select password as newpass from users where login='vaslogin') u set password = u.newpass
 
  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.
 
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 ==
 
== Export dat z databáze ==
Řádek 27: Řádek 36:
 
V příkazové řádce se pak export databáze do souboru provede obdobně:
 
V příkazové řádce se pak export databáze do souboru provede obdobně:
  
  mysqldump -u username -p freenetis > freenetis.sql
+
  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;"