backup-all-mysql: Docker Image für einfaches mysql-Backup

Mit backup-all-mysql auf dockerhub habe ich mir ein Docker-Image gebaut, das ich überall einsetze, wo ich mysql-Datenbanken verwende, um diese automatisch zu sichern:

Einfach das docker-compose-File um einen Block wie diesen erweitern – und schon wird ein Backup der mysql-DB angelegt:

mysql-backup:

  image: dsteinkopf/backup-all-mysql:latest
  environment:
    - BACKUP_INTERVAL=20000
    - BACKUP_FIRSTDELAY=3600
  links:
    - mysql
  restart: always
  volumes:
    - /opt/dockervolumes/wordpress/mysql-backup:/var/dbdumps
    - /etc/localtime:/etc/localtime
    - /etc/timezone:/etc/timezone

(Details auf backup-all-mysql auf dockerhub.)

  • Das legt dann alle BACKUP_INTERVAL Sekunden komprimierte Backups aller Datenbanken in das angegebene Volume. Außerdem wird ein errorslastrun.log angelegt, das etwaige Fehler enthält.
  • Ich sorge dafür, dass alle meine backup-all-mysql-Volumes (so wie alle meine Docker-Volumes) in einem gemeinsamen Verzeichnis liegen, wo sie zudem historisiert gesichert werden. (Hierfür verwende ich übrigens backuppc.)
  • Mit Zabbix überwache ich, dass alle diese errorslastrun.log-Files 1. täglich aktualisiert werden und 2. leer sind. Die Items und Trigger hierfür werden via Autodiscovery angelegt, sodass ich für neue DB-Backups noch nicht einmal etwas in Zabbix per Hand einrichten muss.

7 thoughts on “backup-all-mysql: Docker Image für einfaches mysql-Backup

  1. Ich habe dein backup-all-mysql auch getestet. Das Backup hat auch soweit geklappt, aber leider nur ein einziges Mal. Die weiteren Backups wurden nicht ausgeführt. Muss ich dafür einen Cronjob anlegen oder habe ich etwas übersehen?

    1. Nein, ein Cronjob ist nicht nötig. Mit BACKUP_INTERVAL legst du fest, nach jeweils wie vielen Sekunden ein Backup erfolgen soll. In den Logs gibt er auch aus, dass – und wie lange – er wartet.

  2. Vielen Dank. Jetzt hat es auch bei mir geklappt. Es ist aber nicht möglich, dass die jeweiligen Datensicherungen einen neuen Namen bekommen oder? Ich frage deshalb, weil wenn die Datenbank zerstört sein sollte und es nur eine Datensicherung gibt, die evtl. auch noch einen Fehler enthält, kann man nicht auf eine noch ältere Version zurückgreifen?

    1. Das stimmt soweit. Ich habe die Philosophie, dass es durch dieses Tool – wie Du schon schreibst – immer genau 1 Backup (je DB) gibt. Obendrein wird bei mir das Verzeichnis mit allen Docker-Volumes täglich versioniert gesichert – also auch der mysql-Dump. Die Volumes müssen ohnehin gut gesichert werden und da passt es gut, die DB-Dumps auf gleiche Weise mitzusichern. Das hat sich bei mir seit Jahren bewährt.

  3. Hallo,
    Danke, aber ich bekomme folgende Fehlermeldung:
    ERROR 2003 (HY000): Can’t connect to MySQL server on ‘mysql’ (110)
    Thu Feb 13 09:00:17 CET 2020: ./backup-all-mysql.sh aborted.
    Ich habe mariadb Datenbanken.
    Die Fehler sagt normalerweise, dass keine Verbindung zustandegekommen ist.
    Wie holt sich das script die Zugangsdaten?
    Wo kann ich suchen?

    1. Ja, die Fehlermeldung sagt, dass der Host mit dem Namen “mysql” nicht erreichbar ist bzw. die DB dort keine Connection zulässt. Zugangsdaten spielen zu dem Zeitpunkt noch keine Rolle. Daher vermute ich, dass Du die Container noch nicht korrekt “aufgebaut und verknüpft” hast. In meinem Beispiel oben mach ich das via ...links: mysql. Da gibt es aber verschiedene Möglichkeiten, die mit meinem Script nicht zu tun haben. Für das Script ist es nur wichtig, dass auf dem Host “mysql” die DB antwortet. Konfigurieren kann man das über Umgebungsvariablen. Siehe https://hub.docker.com/r/dsteinkopf/backup-all-mysql/.

Schreibe einen Kommentar

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