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.

11 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/.

  4. Vielen Dank für deine Arbeit 😉

    Laut Nextcloud gibt es noch folgende Ordner:
    The config folder
    The data folder
    The theme folder

    Theme denk ich ist nicht wichtig, wenn mit theme die Grafik gemeint ist.

    Config und data sind noch sehr wichtig, oder?
    Wieso sichert dann dein Docker nur die Datenbank?
    Kann man alles wiederherstellen nur mit der DB?
    Sollte man ggf. noch extra die config und data täglich extra sichern?

    1. Es geht hierbei gar nicht speziell um das Backup von Nextcloud. Dieser Container soll lediglich dafür sorgen, die Mysql Datenbank regelmäßig als Datei zu sichern. Diese Sicherung sollte – zusammen mit den Dateien einer Anwendung – ohnehin zusätzlich auf ein (oder mehrere) separates Medium/Server kopiert werden. Das erledige ich bei mir (auch bei der Nextcloud-Installation) mithilfe von rclone.

  5. Hi. Ich beschäftige auch gerade mit dem Thema Backup und bin über Docker Hub hier her gekommen. Meine Frage ist, wie ich denn ein Restore hinbekomme, falls ich einen anderen Server mit einer Neuinstallation verwenden möchte. Mit den Nextclouddaten und der Nextcloudconfig komme ich soweit klar. Das erledigt momentan noch tar und demnächst vielleicht rsync. Meine bisherigen Versuche, eine Datenbank wiederherzustellen, sind gescheitert. Oder besser gesagt, Nextcloud kann mit dem Restore nichts anfangen.

Schreibe einen Kommentar

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