zur Navigation springen


MySQL Datenbanken sichern und wiederherstellen

erstellt 09.2006

Oftmals wird bei Webinhalten vergessen, dass diese auf Datenbankinhalten basieren. Somit ist eine Sicherung der Datenbankinhalte genauso wichtig wie die Sicherung des Quelltextes.
Diese Anleitung ist keine generelle Sicherungsmethode, sondern entspricht nur meine Vorgehensweise. Da meine existierenden Datenbanken nicht lebensnotwendige Inhalte haben, nehme ich es hin das Veränderungen während des Tages nicht gesichert werden. (Log-Dateien werden nicht erstellt und gesichert)

Da meine Datenbanken in der Nacht nicht verändert werden, kann eine Sperrung der Datenbanken erfolgen. Die Sicherung der einzelnen Datenbanken erfolgt mit:

Notation

  • $ ist der Linux- oder Dosprompt
  • Benutzereingaben sind fett dargestellt
  • alle Befehle müssen mit einem return abgeschlossen werden
  • Befehle im mysql-Monitor müssen mit einem Semikolon ";" und einem return abgeschlossen werden

Allgemeines

  • Die Pfade entsprechen einer XAMPP Installation von Apachefriend.org
  • Die Anleitung benötigt Shell zugriff und Crontab
  • Vergabe eines Passwort für MySQL User root

Sicherung aus der Shell

Sicherung als dump
$ /opt/lampp/bin/mysqldump --opt --add-drop-table --user=root --password=geheim EDV 
  > /opt/lampp/htdocs/php_progs/MySQL_Sicherung/EDV.sql
ACHTUNG! eine Zeile

Sicherung als dump komprimiert
$ /opt/lampp/bin/mysqldump --opt --add-drop-table --user=root --password=geheim EDV | gzip  
  > /opt/lampp/htdocs/php_progs/MySQL_Sicherung/EDV.sql.gz
ACHTUNG! eine Zeile

Erleuterungen:


/opt/lampp/bin/mysqldump
          Installationsverzeichnis von MySQL

--opt
          Optimiert die Erstellung der Dump-Datei
          (Datenbank(en) Schreibzugriff sperren,
          keine Log-Dateien Sicherung, direktes schreiben der Dump's)

--add-drop-table
          Bei der wiederherstellung werden alle bestehenden einträge
          gelöscht und anschließend aus der Sicherung wieder eingespielt.

--user=root --password=root
          Username und Passwort der Datenbank

EDV
          Datenbank
          --databases [OPTIONS] DB1 [DB2 DB3...] = mehrere Datenbanken
          --all-databases = alle Datenbanken

/opt/lampp/htdocs/php_progs/MySQL_Sicherung/EDV.sql
          Ablageverzeichnis und Datei

Wiederherstellung aus der Shell

Sollte die Komprimierung verwendet worden sein, muss die Datei erstmal entpackt werden.
$ gzip -d EDV.sql.gz 

Jetzt gehen wir in die MySQL - Shell
$ ./mysql -u root -p
Enter Password:
Welcome to the mysql monitor ....
mysql> 

Muss die Datenbank gelöscht werden, weil Sie korrupt ist oder andere undefinierte Probleme macht.
mysql> drop database EDV;
Query OK, ....

mysql> 

Muss die Datenbank erst erstellt werden
mysql> create database EDV;
Query OK, ....

mysql> 

Jetzt kann die Sicherung eingespielt werden
mysql> mysql --one-database EDV < EDV.sql 
Query OK, ....

mysql> 

Wenn alles OK können wir ja die MySQL - Shell ja verlassen.
mysql> quit; 
Bye

Automatisierung der Datenbanksicherung

Solange es eine händische Sicherung ist wird diese nur sporadisch verwendet, aber nur selten regelmäßig.
Die Automatisierung auf der Linux-Ebene erfolgt mit cron.
$ crontab -e

00 20 * * * /opt/lampp/bin/mysqldump --opt --add-drop-table --user=root 
  --password=geheim EDV 
  > /opt/lampp/htdocs/php_progs/MySQL_Sicherung/EDV.sql 
ACHTUNG! eine Zeile
    Der Editor ist vi
    somit mit i in den Eingabemodus wechseln und die Zeile eingeben
    nach der Eingabe 2 x [ESC]- Taste drücken um aus den Insert-Modus zu kommen und
    mit :wq [ENTER] den vi schreibend verlassen.
    Wollen Sie nicht schreibend verlassen, so benden Sie mit :q! [Enter]

Das Verzeichnis /opt/lampp/htdocs/php_progs/MySQL_Sicherung/ noch in die tägliche Sicherung einbinden, was ich über eine Sambafreigabe und einem NAS- System erledigt hab.


Viel Spass

Matthias Wulff


Seitenanfang