MySQLdump: Backup, Kopie, Rücksicherung

MySQL Logo

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:

:~$ mysqldump -u <username> -p -h <db-server> --add-drop-table --databases <database1> <database2> <database3> > <path/filename>

-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

:~$ mysqldump -u root -p -h localhost --add-drop-table --databases testdb2018 > /home/jdoe/testdb2018.sql

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:

:~$ mysqldump -u <username> -p -h <db-server> --add-drop-table <database> <table1> <table2> <table3> > <path/filename>

Praktisches Beispiel

In diesem Beispiel werden nur die beiden Tabellen user und history aus der Datenbank testdb2018 exportiert:

:~$ mysqldump -u root -p -h localhost --add-drop-table testdb2018 user history> /home/jdoe/testdb2018.sql

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:

:~$ mysql -u <username> -p <database> < <path/filename>

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

:~$ mysql -u root -p testdb2018 < /home/jdoe/testdb2018.sql

Um ein LOG-File erstellen zu lassen, erweitert man diese Zeule zu

:~$ mysql -u root -p testdb2018 < /home/jdoe/testdb2018.sql > /home/jdoe/testdb2018.log 2>&1

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

:~$ mysql -u root -p

bereits gestartet, dann lautet der Befehl zum Einlesen:

:~$ SOURCE /home/jdoe/testdb2018.sql

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.

CREATE USER 'backup'@'loclahost' IDENTIFIED BY '<password>';
GRANT SELECT, LOCK TABLES, FILE, SHOW VIEW, TRIGGER ON *.* TO 'backup'@'loclahost';
FLUSH PRIVILEGES;

Eine ausführliche Beschreibung aller Parameter findet man -> hier

Buy Me a Coffee at ko-fi.com

You May Also Like

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Aus persönlichen Gründen...

... kann ich den Blog im Moment leider nicht wie gewohnt betreuen und Anfragen zeitnah beantworten. Lediglich die technische Funktionalität versuche ich aufrecht zu erhalten. Sollte es trotzdem was Neues hier geben, dann schreibe ich eine Info in die Telegram-Gruppe.


In der Telegram-Gruppe können Sie sich weiterhin mit anderen Lesern von Împuşcătura austauschen.

Zur Telegram-Gruppe