restic-backup-suite: Datenbank-Dumps
Datenbank-Dumps in restic-backup-suite: Docker MariaDB/MySQL, Docker PostgreSQL und native MySQL/MariaDB, Eintragsformat, Passwort-Variable, Dateinamen und Fehlerverhalten.
Datenbank-Dumps
Vor dem Datei-Backup erzeugt backup.sh SQL-Dumps in einem temporären Verzeichnis /tmp/restic-db-dump-XXXXXX (Rechte 700). Dieses Verzeichnis wird zusammen mit BACKUP_PATHS gesichert und beim Beenden des Scripts gelöscht. Die Dumps laufen in dieser Reihenfolge: nativ, Docker MariaDB/MySQL, Docker PostgreSQL.
Mit restic-backup --dump-only kannst Du die Dumps ohne Backup testen.
Docker MariaDB und MySQL
DOCKER_MARIADB_CONTAINERS=(
"my-mysql:root:app_db"
"new-mariadb:root:wiki_db:MARIADB_ROOT_PASSWORD"
"custom-db:root:mydb:DB_ROOT_PASS"
)
Format: container_name:db_user:db_name[:passwort_env_var]
| Feld | Bedeutung |
|---|---|
container_name |
Name eines laufenden Containers (exakter Treffer in docker ps) |
db_user |
Datenbank-Benutzer |
db_name |
Datenbank, die gedumpt wird (eine Datenbank pro Eintrag) |
passwort_env_var |
Name der Umgebungsvariable im Container, die das Passwort enthält. Standard: MYSQL_ROOT_PASSWORD. Erlaubt sind nur Namen aus Buchstaben, Ziffern und Unterstrich, sonst wird der Eintrag mit Fehler übersprungen |
Ablauf pro Eintrag:
- Das Script führt per
docker execim Containermariadb-dumpaus, falls vorhanden, sonstmysqldump. - Das Passwort liest der Befehl im Container aus der benannten Umgebungsvariable. Es steht nicht in
config.sh. - Optionen:
--single-transaction --quick --routines --triggers --events. - Ergebnisdatei:
<container>_<db_name>.sql.
Läuft der Container nicht, überspringt das Script den Eintrag mit einer Warnung. Schlägt der Dump fehl, wird die unvollständige Datei gelöscht und ein Fehler geloggt.
Docker PostgreSQL
DOCKER_POSTGRES_CONTAINERS=(
"my-postgres:postgres:app_db"
)
Format: container_name:db_user:db_name
Das Script führt im Container pg_dump -U <db_user> --no-password <db_name> aus. Das Passwort kommt aus der Variable POSTGRES_PASSWORD des Containers, sie muss dort gesetzt sein. Ergebnisdatei: <container>_<db_name>.sql.
Nativ (ohne Docker)
MYSQL_BACKUP_ENABLED=true
MYSQL_EXCLUDE_DBS="information_schema performance_schema mysql sys"
Bei true listet das Script alle Datenbanken des Hosts (SHOW DATABASES) und dumpt jede einzeln nach <db>.sql. Es verwendet mariadb-dump beziehungsweise mariadb, wenn vorhanden, sonst mysqldump und mysql. Fehlt ein Programm, überspringt das Script den nativen Dump mit einer Warnung.
- Es gibt keine Zugangsdaten-Einstellung. Der Zugriff muss für root ohne Passwortabfrage funktionieren (zum Beispiel über den Unix-Socket).
- Die vier Systemdatenbanken
information_schema,performance_schema,mysqlundsyswerden immer ausgelassen, unabhängig vonMYSQL_EXCLUDE_DBS. - Optionen:
--single-transaction --quick --lock-tables=false --routines --triggers.
Fehlerverhalten
Ein fehlgeschlagener Dump wird geloggt, bricht das Backup aber nicht ab. Läuft danach
restic backuperfolgreich, endet der Lauf mit Exit-Code 0 und schreibt die Marker-Datei, auch wenn ein Dump fehlt. Prüfe das Log, wenn Dumps wichtig sind, oder teste neue Einträge vorher mit--dump-only. Dort führt ein fehlgeschlagener Dump zu Exit-Code 1.
Wiederherstellung
Die Dumps lassen sich mit restic-restore einspielen. Beachte die Einschränkungen auf der Seite Restore.