Problem:
Häufig zieht man von einem Server oder Webspace zu einem anderen um. Dazu will man natürlich seine Datenbank mitnehmen. Doch die ist manchmal so umfangreich, daß phpMyAdmin diese nicht mehr verarbeiten kann. Was also tun?
Lösung:
Ich stelle hier jeweils 3 Möglichkeiten vor die untereinander kompatibel sind. Sprich: man ist nicht beim eine Export an die selbe Methode beim Import gebunden.
- per SSH
- mit phpMyAdmin
- mit eigenem PHP-Script
Export:
1.) per SSH
Dazu nutzen wir <code>mysqldumpcode>:
mysqldump -uUSER -pPASSWD --allow-keywords --opt DB > DB.sql #Verfeinerung: direkt mit gzip packen: mysqldump -uUSER -pPASSWD --allow-keywords --opt DB | gzip > DB.sql.gz
2.) mit phpMyAdmin
Die Datenbank in phpMyAdmin aufrufen und auf der Übersichtsseite oben auf '<code>Exportcode>' klicken.
Alle Tabellen markieren, '<code>DropTablescode>', '<code>Complete insertscode>' und '<code>save as filecode>' aktivieren. Evtl. auch '<code>Compressioncode>' auf '<code>gzipcode>' setzen.
Achtung! Sollte die Herkunftsversion von MySQL größer gleich 4.1 sein, aber die Zielversion kleiner als 4.1 muß unbedingt '<code>SQL export compatibility: MySQL40code>' angehakt werden.
'<code>Startcode>' klicken und warten bis der Download sich öffnet.
(Bitte die Anmerkung beachten.)
3.) mit eigenem PHP-Script
Folgendes PHP-Script als z.B. <code>mysqldump.phpcode> auf dem Server speichern und per Webbrowser aufrufen.
<?PHP $User = 'USER'; // DB-User. $Password = 'PASSWD'; // DB-Password $DatabaseName = 'DB'; // DB-Name $File = '/home/www/web1/html/DB.sql'; // the complete path echo 'starting...<br/>'; $Results = shell_exec( "mysqldump --allow-keywords --opt -u$User -p$Password $DatabaseName > $File"); echo 'finished<br/>'; ?>(Bitte die Anmerkung beachten.)
Import:
1.) per SSH
Die exportierte Datei liegt nun auf dem neuen Server/Webspace.
Dazu nutzen wir <code>mysqlcode>:
mysql -uUSER -pPASSWD DB < DB.sql #Verfeinerung: direkt mit gzip entpacken: gzip -dc DB.sql.gz | mysql -uUSER -pPASSWD DB
2.) mit phpMyAdmin
Die exportierte Datei liegt auf dem heimischen Rechner.
Die neue Datenbank in phpMyAdmin aufrufen und auf der Übersichtsseite oben auf '<code>SQLcode>' klicken.
Bei '<code>use Textfilecode>' auf '<code>Browsecode>' klicken und die Datei auf dem Rechner auswählen. Nach dem Klick auf den Button '<code>startcode>' wird die Datei hochgeladen und importiert.
(Bitte die Anmerkung beachten.)
3.) mit eigenem PHP-Script
Die exportierte Datei liegt nun auf dem neuen Server/Webspace.
Folgendes PHP-Script als z.B. <code>mysqldump.phpcode> auf dem Server speichern und per Webbrowser aufrufen.
<?PHP $User = 'USER'; // DB-User. $Password = 'PASSWD'; // DB-Password $DatabaseName = 'DB'; // DB-Name $File = '/home/www/web1/html/DB.sql'; // the complete path echo 'starting...<br/>'; $Results = shell_exec( "mysql -u$User -p$Password $DatabaseName < $File" ); echo "import-results:<br/>n"; echo $Results; ?>(Bitte die Anmerkung beachten.)
Anmerkung:
Bei PHP-Scripten kann es zu Probleme wegen Speichermangel oder Ausführzeiten kommen wenn die Datenbank zu groß ist.
Lösungen:
- Eine andere der 3 Möglichkeiten versuchen.
(Per SSH gibt es diese Probleme nicht.) - Nur Teile der Datenbank exportieren/importieren.
(Kostet mehr Handarbeit.) - In der php.ini die Voreinstellungen ändern.
Zusätzlich kann es bei den jeweils dritten Lösungen sein, daß die Ausführungsrechte für <code>mysqlcode> und <code>mysqldumpcode> nicht gegeben sind.
Entweder wegen open_basedir, safe_mode oder fehlende Rechte des Webusers.
Hier ist dann jeweils eine der anderen Lösungen zu wählen.