Regelmäßige Backups einer MariaDB/MySQL Instanz

  Worum gehts?

Wenn man eine Datenbank betreibt, sollte man regelmäßige Backups dieser anfertigen. Ich habe wir dazu dieses einfache Backupkonzept zurecht gelegt, welches aber im Falle des Festplattendefekts auf unserem Server dafür sorgte, dass ich die komplette Datenbank wieder herstellen konnte.

Welche Voraussetzungen werden benötigt?
Was ist zu tun?

Man legt eine Shell Datei an, z.B. dbdump.sh. Diese hat folgenden Inhalt:

#!/bin/bash
#Verzeichnis für die Backupdateien (Sollte auf einer anderen Festplatte sein
BACKUP_DIR=<directory>

#Dateiname für Backupfiles
BACKUP_FILE=dbdump
#Administrationsuser des  DB Servers miit Zugriff auf alle DBs
DB_USER=<dbuser>

#Passwort des Users
DB_PASSWD=<password>

#Zeitraum über den Backups aufgehoben werden sollen
DAYS_DBDUMP=30

NOW=$(date +"%Y%m%d%H%M%S")

FILE=${BACKUP_DIR}/${NOW}_${BACKUP_FILE}.sql.gz
PATTERN_DBDUMP="${BACKUP_DIR}/*_${BACKUP_FILE}.sql.gz"

mysqldump --user=$DB_USER --password=$DB_PASSWD --all-databases | gzip > $FILE
chmod 660 $FILE

find $PATTERN_DBDUMP -ctime +$DAYS_DBDUMP -print -exec rm {} \;

Dieses Shellscript exportiert mit dem Tool mysqldump alle Datenbanken samt Inhalt in eine SQL Datei, komprimiert diese mit gzip und versieht diese mit dem aktuellen Zeitstempel. Anschließend werden alle Backups gelöscht, die älter als $DAYS_DBDUMP Tage sind.

Nun muss man noch dafür sorgen, dass das Script regelmäßig läuft. Mit dem Kommando

sudo vi /etc/crontab

trägt man hierzu folgende Zeile in die Cronjob Tabelle ein:

00 22 * * * root /dir/dbdump.sh

dir ist dabei mit dem Verzeichnis zu ersetzen, in dem das Shellscript liegt.

Um ein Backup wieder einzuspielen, entpackt man die Backupdatei mit:

gunzip <file>.sql.gz

Anschließend führt man die darin enthaltenen SQL Befehle aus mit:

mysql -u<user> -p<password> < <file>.sql

Wenn man eine Backupdatei ins Verzeichnis /var/lib/phpMyAdmin/upload/ kopiert, kann sie von dort auch direkt mit der Import Funktion von phpMyAdmin eingespielt werden. (Auf Grund der maximalen Scriptlaufzeit und dem Overhead durch die PHP Scriptausührung, empfiehlt sich dass aber nur für kleinere Backups)

Kommt es beim Einspielen eines Backups zum Fehler Unknown option 'STATS_PERSISTENT' so importiert man wahrscheinlich ein Backup einer neueren MariaDB/MySQL Version (MariaDB >= 10.0 / MySQL >= 5.6) in eine ältere Version. In diesem Fall löscht man aus der zu importierenden SQL Datei einfach alle Vorkommnisse der Zeichenkette STATS_PERSISTENT=0 und importiert dann erneut.

Schreibe einen Kommentar

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