Verbessertes Backup

Das Backup-Skript sichert momentan zwar schon die Docker-Volumes, allerdings muss dort bei einer MySQL-Datenbank wie der von WordPress nicht unbedingt der aktuelle Stand stehen. Deshalb baue ich vor dem Aufruf des eigentlichen Backups noch den folgenden Aufruf ein:

/bin/docker exec hex_blog-wordpress-mysql_1 /bin/bash -c 'MYSQL_PWD=${MYSQL_ROOT_PASSWORD} /usr/bin/mysqldump -B wordpress --add-drop-database --single-transaction > /var/lib/mysql/wordpress-dump.sql' 2>/dev/null || true

Der Befehl lässt sich in zwei Teile zerlegen. Der äußere Teil wird direkt auf dem Server ausgeführt:

/bin/docker exec hex_blog-wordpress-mysql_1 /bin/bash -c 'BEFEHL' 2>/dev/null || true

Durch dieses Konstrukt wird der angegebene BEFEHL im MySQL-Container von WordPress ausgeführt. Die Bash ist notwendig, weil der konkrete BEFEHL Shell-Features braucht. Da der MySQL-Container – beispielsweise bei einem Update – nicht zwangsläufig laufen muss, werden Fehlermeldungen mit 2>/dev/null verschluckt. Am Ende wird noch der Return-Code mit || true auf 0 – also Erfolg – gedrückt, damit das Backup-Skript im Fehlerfall nicht abbricht.

Der innere Teil des Befehlt wird damit also im MySQL-Container von WordPress ausgeführt:

MYSQL_PWD=${MYSQL_ROOT_PASSWORD} /usr/bin/mysqldump -B wordpress --add-drop-database --single-transaction > /var/lib/mysql/wordpress-dump.sql

Dieser Befehl überträgt zunächst das Datenbank-Password aus der bereits gesetzten Umgebungsvariable MYSQL_ROOT_PASSWORD in MYSQL_PWD, wo es beim anschließenden Aufruf von mysqldump verwendet wird.

Mit -B wordpress wird nur die WordPress-Datenbank exportiert, und zwar inklusive CREATE DATABASE.

Das --add-drop-database sorgt dafür, dass auch noch ein DROP DATABASE vorgeschaltet wird. Das ist beim späteren Import hilfreich, falls die Datenbank schon existiert.

Durch --single-transaction wird ein konsistenter Dump erzeugt.

Zu guter Letzt wird der Dump mit > /var/lib/mysql/wordpress-dump.sql innerhalb des existierenden Docker-Volumes gespeichert.

Da der Dump nun in einem Docker-Volume liegt, wird er vom Backup-Skript im Anschluss gesichert.

Schreibe einen Kommentar

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