Wer ein Content Management System oder einen Onlineshop auf einen neuen Server umzieht, steht oft vor folgendem Problem: Die MySQL-Datenbank ist so gross, dass ex beim Exportieren über PHPMyAdmin zu einem Timeout kommt – von den Ladezeiten ganz abgesehen.
Hat der neue Server SSH-Zugang und gestattet der alte Server Zugang zur MySQL-Datenbank von aussen, so kann man die unlimitierte Bandbreite zwischen beiden Servern für einen automatisierten Umzug der MySQL-Datenbank nutzen.
Das Script setzt folgendes Szenario voraus:
- “Server1” ist der alte Server, “Server2” ist der neue Server.
- Port 3306 ist in der Firewall von Server1 freigegeben. Hier sollte man auf ein komplexes Passwort achten und nach Möglichkeit den Port nur für die IP-Adresse von Server2 freigeben.
- Die MySQL-Datenbank heisst “wordpress_db”
- In der MySQL-Datenbank gibt es einen Account namens “wordpress_usr” mit Passwort “wordpress_pwd”. Dieser Account hat uneingeschränkte Rechte und hat als Host den Namen oder die IP von Server2 eingetragen.
- Die MySQL-Datenbank und der zugehörige Admin Account existieren bereits auf Server2. Die Datenbank ist jedoch leer.
Wir sind per SSH auf Server2 eingelogged und lassen das folgende Script laufen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/bin/bash DBNAME=wordpress_db DBUSR=wordpress_usr DBPWD=wordpress_pwd echo "Exporting $DBNAME ..." echo mysqldump -h server1 --force --opt -u $DBUSR -p$DBPWD $DBNAME -r $DBNAME.sql echo "Importing $DBNAME ..." echo mysql -u $DBUSR -p$DBPWD $DBNAME < $DBNAME.sql echo echo "DONE!" |
Das Script exportiert die MySQL-Datenbank vom alten Server als SQL-Dump in eine Datei mit Namen der Datenbank und der Endung “.sql”.
Parameter “–opt” dort dafür, dass der Dump wichtige Angaben wie z.B. “DROP TABLE” und “SET CHARSET” enthält. So lässt sich der Import beliebig oft durchführen, es werden immer alle Daten in der MySQL-Datenbank ersetzt. Zudem ist sichergestellt, dass die Zeichenkodierung übernommen wird.
Nach dem Export wird auf dem neuen Server der SQL-Dump aus der Datei in die neue MySQL-Datenbank importiert.
Wichtig, weil Fehlerquelle Nr.1:
Bei Parameter “-p” folgt das Passwort unmittelbar, d.h. OHNE Leerzeichen zwischen “-p” und dem Passwort.
Das Script eignet sich nicht nur zum Server-Umzug, sondern auch zum einfachen Aufbau ausfallsicherer Datenbanksysteme oder zur täglichen Datensicherung.
Mehr zum Thema:
MySQL-Reference Manual: mysqldump im Detail