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.