Import a export databáze: Porovnání verzí
Řádek 35: | Řádek 35: | ||
mysqldump -u username -p freenetis --routines > freenetis.sql | mysqldump -u username -p freenetis --routines > freenetis.sql | ||
+ | |||
+ | == Skript All in one == | ||
+ | |||
+ | #!/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 freenetis -e "update config set value = '$PROTOCOL' where name = 'protocol';" | ||
+ | |||
+ | echo "Nastavuji domenu na $DOMAIN..." | ||
+ | mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD freenetis -e "update config set value = '$DOMAIN' where name = 'domain';" | ||
+ | |||
+ | echo "Nastavuji suffic na $SUFFIX..." | ||
+ | mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD freenetis -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 freenetis -e "update users, (select password as newpass from users where login='$USER_LOGIN') u set password = u.newpass" |
Verze z 26. 7. 2011, 18:25
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
#!/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 freenetis -e "update config set value = '$PROTOCOL' where name = 'protocol';" echo "Nastavuji domenu na $DOMAIN..." mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD freenetis -e "update config set value = '$DOMAIN' where name = 'domain';" echo "Nastavuji suffic na $SUFFIX..." mysql -u $LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD freenetis -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 freenetis -e "update users, (select password as newpass from users where login='$USER_LOGIN') u set password = u.newpass"