MySQL Datenbank oder einzelne Tabelle kopieren

Neben der Notwendigkeit, eine Datenbank ab und an zu sichern, kann auch das Problem auftauchen, dass man eine einzelne Tabelle unter MySQL kopieren muss. Zur automatisierten Vollsicherung empfehle ich MySQLDumper, dem Standardtool, das kaum Wünsche offenlässt.
Für eine gelegentliche Sicherung ist das Kommandozeilen-Tool „mysqldump“ zu empfehlen, das neben einer kompletten Datenbank auch einzelne Tabellen sichern und somit auch kopieren kann.

Hinweis (zwei Programme, nahezu gleicher Name)
Mysqldumper: PHP-Skriptsammlung zur automatisierten Sicherung/Wiederherstellung von MySQL Datenbanken auf einem Webserver
Mysqldump: MySQL-Tool zur Datensicherung (Kommandozeile)

So sichert man eine Datenbank unter MySQL
Das Tool „mysqldump“ ist in der Windows-Installation beispielsweise unter „C:ProgrammeMySQLMySQL Workbench 5.2 CE“ vorhanden. Da es sich bei mysqldump um ein Kommandozeilenprogramm handelt, sollte via „cmd“ in das Verzeichnis gewechselt und das Programm mit entsprechenden Parametern aufgerufen werden. Ein Doppelklick per Windows-Explorer bringt mangels Übergabeparameter und GUI nichts.
Unter Linux langt der Aufruf „mysqldump“ unter der Shell bzw. mit einer Putty-Verbindung.

Um eine Sicherung durchzuführen, ist das Tool wie folgt aufzurufen:

mysqldump  -hlocalhost  -uUser  -pPasswort [ZuSicherndeDatenbank] > datensicherung.sql

Nur einzelne Tabelle sichern:
mysqldump  -hlocalhost  -uUser  -pPasswort [ZuSicherndeDatenbank] [Tabellenname] > datensicherung.sql

Erklärung:
-h: Hostname, beispielsweise „localhost“
-u: Username
-p: Passwort
[ZuSicherndeDatenbank]: Name der Datenbank
[Tabellenname]: optional

Mysqldump sichert im obigen Beispiel die Datenbank [ZuSicherndeDatenbank] im File „datensicherung.sql“. Dieses File wird im aktuellen Verzeichnis geschrieben.

Rücksicherung der MySQL-Sicherung
Die Rücksicherung erfolgt nicht über mysqldump, sondern über mysql selbst. Wichtig ist, dass die Datenbank auf dem Zielsystem bereits bestehen muss. Die im Sicherungsfile enthaltenen Tabellen und Views dürfen jedoch auf dem Zielsystem nicht enthalten sein.

mysql -hlocalhost -uUser -pPasswort [ExisitierendeDatenbank]  < datensicherung.sql

Dieser Weg eignet sich auch hervorragend, um eine Datenbank über Servergrenzen hinweg zu sichern bzw. zu kopieren, da das Ausgabefile („datensicherung.sql“) hierfür einfach auf den Zielhost kopiert und importiert werden muss.

Kopieren einer einzelnen Tabelle unter MySQL innerhalb einer Datenbank
Wie wir oben gesehen haben, können wir per mysqldump auch einzelne Tabellen sichern. Um eine Tabelle zu kopieren, sichern wir hierfür via mysqldump die Tabelle in ein File („datensicherung.sql“). Dann ändern wir den Tabellenamen der Quelltabelle ab (zum Beispiel „tabelle_old“), denn beim Kopieren (richtigerweise: Rücksichern“) wird die Tabelle mit dem Originalnamen neu angelegt. Dies würde zu einem Fehler führen, wenn die Tabelle bereits existent ist.
Per „mysql“ wird das File importiert und wir haben nach erfolgreicher Ausführung eine Kopie der Tabelle in der Datenbank.

Warum nutzen wir nicht phpmyadmin?
Wer „phpmyadmin“ auf seinem Server installiert hat, kann natürlich eine Tabelle skripten, ggfls das Skript anpassen (neuer Tabellenname) und ausführen. Jedoch ist phpmyadmin nicht auf jedem Host vorhanden oder soll aus Sicherheitsgründen dort installiert sein. Wer große Tabellen oder Datenbanken kopieren oder sichern möchte, sollte die Kommandozeile via „mysqldump“ nutzen und nicht per Skript unter phpmysql eine Kopie anfertigen.
UPDATE: Wer phpmyadmin auf seinem MySQL-Server installiert hat, kann unter „Optionen“ auch große Tabellen kopieren.

Schreibe einen Kommentar