Nicht immer kann man aufgrund von IP-Beschränkungen mit Tools wie -> HeidiSQL komfortabel Dumps von Datenbanken erstellen. Anstatt über den localhost und phpMyAdmin mit seinen vielen Exportoptionen zu verwenden, geht es richtig einfach mit dem dem Bordwerkzeug MySQLdump.
Eine kurze Beschreibung über MySQL Dump, Backup und Restore.
Dump erstellen (Backup)
Vor einem Dump sollte man andere Zugriffe auf die Datenbank unterbinden, da während des Auslesens einer Tabelle standardmäßig eine Schreibsperre eingerichtet wird.
Die Syntax um eine komplette Datenbank in eine Dump-Datei zu sichern:
-u <username> ist der Benutzer der Datenbank, der Dump-Berechtigungen hat.
-p fordert nach Absetzen des Befehls das Passwort des Datenbank-Users an.
-h <db-server> ist nicht unbedingt notwendig, wenn man sich auf dem Datenbankserver selbst befindet.
–add-drop-table füge ich gerne ein, um die Daten in ein Testsystem einspielen zu können. Für ein normales BackUp ist der Parameter nicht notwendig, schadet aber auch nicht.
–databases bestimmt eine oder mehrere Datenbanken, die man durch Leerzeichen getrennt angeben kann
Praktisches Beispiel
Dump einer Tabelle erstellen (Backup)
Manchmal kann es Sinn machen, nur einzelne Tabellen zu exportieren. Dazu muss die Option –databases weggelassen werden, da sie festlegt, dass alle folgenden Angaben Datenbanken sind. Die Sytax lautet dann:
Praktisches Beispiel
In diesem Beispiel werden nur die beiden Tabellen user und history aus der Datenbank testdb2018 exportiert:
Um eine einzelne Tabelle zu importieren gilt das Selbe, wie für Datenbanken (siehe nächster Abschnitt).
Dump einspielen (Restore)
Durch die Verwendung von –add-drop-table wurden im Dump die Statements für das Löschen und das neu Erstellen aller Tabellen erzeugt. Wenn man sich auf dem Zielserver befindet, lautet die Syntax:
Zu beachten ist, dass beim Einspielen des Dumps in ein anderes Datenbanksysten (z.B. ein Testsystem) eine Datenbank gleichen Namens erzeugt wird. Hat also die Zieldatenbank einen anderen Namen, dann muss das Dump-File am Dateianfang etwas modifiziert werden, indem der Datenbankname an die Zieldatenbank angepasst wird. Das gilt auch für einzeln zu importierende Tabellen.
-- Current Database: `testdb2018`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `testdb2018_duplikat` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `testdb2018_duplikat`;
--
Die Zeile CREATE DATABASE wird nur benötigt, wenn die Datenbank noch nicht vorhanden ist. Existiert die Datenbank bereits auf dem Zielsystem, löscht man diese Zeile und ändert das USE-Statement auf den Namen der Datenbank im Zielsystem.
Praktisches Beispiel
Um ein LOG-File erstellen zu lassen, erweitert man diese Zeule zu
TIPP: Sehr große Dump-Files kann man in Windows z.B. mit dem Texteditor THEGUN editieren, der -> hier erhältlich ist. Unter Ubuntu reicht meistens nano oder als Alternative -> sed.
Alternative
Hat man MySQL bereits mit
bereits gestartet, dann lautet der Befehl zum Einlesen:
Das hat den Vorteil, dass man die Ausführung der Befehle im Terminal mitverfolgen kann.
Automatisieren
Um den Sicherungsvorgang mit einem Script automatisch durchzuführen, sollte man aus Sicherheitsgründen einen speziellen User einrichten, dem man die dafür notwendigen Rechte gibt.
Eine ausführliche Beschreibung aller Parameter findet man -> hier