Import a export databáze: Porovnání verzí
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 17 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čí. | ||
== 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í | + | 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 9: | Řá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 | + | 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 == | == Export dat z databáze == | ||
Řádek 15: | Řá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 | + | 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;"