
MySQL Datenbank sichern und wiederherstellen
Einführung
Es gibt mehrere Wege eine oder mehrere MySQL-DB(s) zu speichern und wieder herszustellen. Es gibt Drittanbieter Scripte (meistens PHP), die direkt genutzt werden können und zu
empfehlen sind, wenn man keinen Zugriff auf die Kommandozeile des Web- oder DB-Servers hat. Sie sind meistens sehr einfach und oft sogar mit einer graphischen Oberfläche. Ich
erkläre hier aber die Variante mit der Linux-Kommandozeile, die auch mit dem Artikel
unter Advanced Linux Infos > Webserver (Lamp) installieren und einrichten zusammenhängt.
Voraussetzungen
- MySQL Datenbank (samt Zugangsdaten)
- Zugriff auf die GNU/Linux Commandline (eventuell per SSH)
- Editor (In diesem Beispiel wird nano verwendet)
MySQL Datenbank sichern
Bitte auf dem Server in der Kommandozeile folgenden Befehl ausführen:
mysqldump -u root -p datenbank1 > /usr/src/datenbank1.sql
Fett markiert ist der Datenbankname, der Sicherungspfad und der Sicherungsdateiname. Die musst Du auf Deine gewünschten Angaben umstellen. Wenn Du den Befehl ausführst,
wirst Du aufgefordert das (MySQL-)Rootpasswort einzugeben.
Da ich die Sicherung im Webordner haben möchte, per FTP darauf zugreife und sie dann in mein Backup speichere, sieht die Zeile bei mir so aus:
mysqldump -u root -p easeli > /var/www/mysqldumps/easeli_JAHR_MONAT_TAG.sql
Die gespeicherte Datei enthält bei mir das heutige Datum, damit ich mehrere Sicherungen nebeneinander haben kann.
Speichern auf anderen Computer
Dafür gibt es mehrere Varianten. Man kann:
- ... per FTP auf den Server zugreifen und die Datei manuell auf einen anderen Computer / Server kopieren
- ... die Datei per scp (Mehr Infos) auf einen anderen Computer / Server kopieren
- ... die Datei einfach liegen lassen. Aber vorsicht: Wenn der Speicher (die HDD z.B.) kaputt geht, hat man die Daten verloren!
- ... das ganze je nach Variante auch mit einem Script lösen
- ... es eventuell auf noch andere Varianten lösen. Sei kreativ! :-)
MySQL Datenbank auf dem neuen Server erstellen
Ich gehe davon aus, dass der MySQL Server schon installiert, ein Rootlogin, die gewünschte Datenbank und ein Datenbankuser eingerichtet ist. Falls Du nicht weisst wie das geht, hat es unter
Linux / Debian > Webserver (LAMP) installieren und einrichten eine kurze Anleitung wie man das macht.
MySQL Dump in Datenbank wiederherstellen
Jetzt stellen wir den zuvor gemachten Dump der MySQL Datenbank easeli auf dem Server in die zuvor erstellte neue Datenbank easeli wieder her. Dazu muss man das MySQL Root-Passwort eingeben.
Falls es auf dem neuen Server anders lautet, natürlich das richtige nehmen:
mysql -u root -p easeli < /var/www/mysqldumps/easeli_JAHR_MONAT_TAG.sql
Nach dem Einspielen, sollte unbedingt ein Flush Privileges auf der Datenbank durchgeführt werden. Dazu loggen wir auf den MySQL Server ein:
mysql -u root -p
Und führen den Befehl aus um die Berechtigungen neu einzulesen:
FLUSH PRIVILEGES;
MySQL-Dump per Cronjob ausführen
Damit man nicht manuell den Dump ausführen muss, bietet es sich an einen Cronjob einzurichten, der das in einem Intervall automatisch ausführt.
Dafür erstellen wir die Datei in /etc/cron.weekly/auto_dump (oder /etc/cron.daily/auto_dump, wenn man das täglich machen möchte):
sudo nano /etc/cron.weekly/auto_dump
...und fügen folgenden Inhalt ein:
#!/bin/bash
dateiname=DEINDBNAME_`date +%Y_%m_%d`.sql
pfad=/var/www/mysqldumps/$dateiname
mysqldump -u root -pDEINPASSWORT DEINEDB > $pfad
chown user:gruppe $pfad
Das Passwort bei -p MUSS wie angegeben ohne Abstand eingegeben werden!
Den user:gruppe ändere ich, damit ich per sFTP mit meinem FTP User die Datei holen, respektive überhaupt sehen kann.
Die Cronjobs werden mit Root ausgeführt, wenn man die crontab nicht umkonfiguriert!
Speichere und schliesse die Datei.
Jetzt führen wir folgenden Befehl aus, damit die Datei ausführbar wird:
sudo chmod +x /etc/cron.weekly/auto_dump
Wenn man den Computer jetzt neustartet, wird ab jetzt einmal wöchtenlich (oder täglich wenn cron.daily) der Dump ausgeführt und direkt mit Datum versehen.
Die ` (Akzent links) sind nötig, damit der Befehl date auch innerhalb der spezifizierten Variable ausgeführt wird.
Die Datei kann jetzt per SCP oder FTP auf einen anderen Computer kopiert werden. Man kann das natürlich auch automatisieren.
Infos zum Dokument
Author: Christoph Iseli
Datum: 01.04.2014
Letzte Änderung: 21.11.2014