MySQL Backup unter Linux
Einleitung
MySQL Datenbanken sind in der heutigen Zeit nicht mehr von einem Server wegzudenken. Informationen jeglicher Art können gespeichert, aufgerufen und gefiltert werden. Hierzu bietet MySQL eine Syntax, welche ohne Probleme in z.B. PHP integriert werden kann.
Um zu gewährleisten, dass Datenbanken auch nach einem Systemcrash noch verfügbar sind, ist es nötig diese regelmäßig zu sichern.
mysqldump
MySQL bringt ein Tool mit, welches mysqldump heisst. Mit diesem Tool ist es möglich eine Sicherung aller Datenbanken anzufertigen. Zeitgemäße Systeme arbeiten mit einer passwortgeschützten Abfrage. Aus diesem Grund werde ich hier auch nur diese Variante vorstellen.
Rufen wir mysqldump ohne Parameter auf bekommen wir folgendes zur Benutzung angezeigt:
$ mysqldump Usage: mysqldump [OPTIONS] database [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS] For more options, use mysqldump --help
Mit
$ mysqldump --help
werden alle zur Verfügung stehenden Optionen angezeigt. Diese sind aber für ein Backup nicht alle relevant. Die wichtigsten Optionen sind für uns: -u -p
Die Option -u gibt den Usernamen an, der Zugriff auf die Datenbank hat. Die Option -p zeigt eine Passworteingabeaufforderung vor dem Ausführen des Befehls.
Sichern der MySQL Datenbank
Sichern einer bestimmten Datenbank
Um eine bestimmte Datenbank zu sichern benutzen wir einfach folgende Syntax:
$ mysqldump -u USER -p database USERDATABASE > usr1_db.sql
USER entspricht hier dem Benutzer. Die Option -p wird ohne dazugehörigen Parameter übergeben. USERDATABASE entspricht der eigentlichen Datenbank. Wenn alles richtig eingegeben worden ist, bekommen wir eine Passwortabfrage zu sehen. Hier geben wir das Passwort des Benutzers ein uns sollten nun die Datei usr1_db.sql vorfinden, welche alle Datenbankeinträge enthält.
Sichern aller Datenbanken
Um alle Datenbanken zu sichern, müssen wir uns als MySQL root anmelden. Folgende Syntax wird benutzt, welche ähnlich funktioniert wie die bereits oben beschriebene:
$ mysqldump -u USER -p --all-databases > full_db.sql
Wiederherstellen der MySQL Datenbank
Das importieren eines dump files ist ebenso einfach. Hierzu nutzen wir folgende Syntax:
$ mysql -p USERDATABASE -u USER -p < usr1_db.sql
oder um alle Datenbanken wiederherzustellen:
$ mysql -p USERDATABASE -u USER -p < full_db.sql
Automatisiertes Sichern
Um die Datenbank automatisch zu sichern, kann man folgendes Script nutzen, welches Jerome Griessmeier auf seiner Webseite zur Verfügung stellt:
#!/bin/sh # Backup Script # Author: Jerome Griessmeier # Version: 0.2 # # This Shell Script backup your database # For automating use a cronjob # # Pfade setzen/ Setting path variables # MYSQL_DUMP=/usr/bin/mysqldump BACKUP_DIR=/pfad/zu/backup_verzeichnis TAR=/bin/tar RM=/bin/rm DB_NAME=DB_NAME DB_USER=DB_USER DB_PASS=DB_PASS AKT_DATUM=`date +%Y%m%d%H%M` # # mysql dump erzeugen / create mysql dump # $MYSQL_DUMP $DB_NAME -u $DB_USER --password=$DB_PASS > $BACKUP_DIR/$AKT_DATUM.backup.sql # # mysql dump komprimieren / Compress data # cd $BACKUP_DIR $TAR -cvzf $AKT_DATUM.backup.sql.tgz $AKT_DATUM.backup.sql # # aufraeumen / clean up # $RM $AKT_DATUM.backup.sql
cronjob einrichten
crontab -e
cronjob anlegen:
55 2 * * * root /backup/backup.sh >> /dev/null 2>&1
Start des Scripts um 02.55 jede Nacht