Ihr habt eine Synology Diskstation oder Rackstation NAS und möchtet Daten der mySQL oder MariaDB sichern die über das Paketzentrum installiert sind? Welche Backups der Datenbanken sind schon vorhanden, und wie kann man rotierende Dumps der Datenbanken erstellen? Das erkläre ich im folgenden Beitrag.
MariaDB aus dem Paketzentrum
DIe MySQL oder MariaDB aus dem Paketzentrum ist perfekt für den Betrieb kleiner Anwendungen direkt auf der Synology NAS. Das ganze ist gut umgesetzt im Standard von Synology, aber eben deutlich anders als bei einer installierten MySQL auf einem Debian oder anderen Linux System. Vor allem die Ordner der Datenablage unterscheiden sich von Linux. Wo die Daten abgelegt werden könnt ihr, bei dem MariaDB Pake, in der Anwendung festlegen:
Pfade
Wenn ihr das Volume1 ausgewählt habt so findet ihr die eigentlichen Datenbanken im Ordner
/volume1/@database/mariadb
oder
/volume1/@database/mysql
Dort befinden sich auch Backups von früheren Versionen.
Die Datenbanken findet ihr also nicht auf einem gemeinsamen Ordner. Mit einem Backup des gesammten Volumes würden die Datenbanken gesichert sein. Das betrifft aber nur die Container der Daten im Filesystem. Ob daraus eine Datenbank wirklich konsistent widerhergestellt werden kann ist nicht garantiert. Wer also häufiger Sicherungen und verwendbare Backup Dumps haben möchte braucht eine Lösung. Doch die ist nicht weit!
AutoMySQLBackup
Der Helfer ist das Bash Script automysqlbackup. Das Script wird auf Sourceforge bereitgestellt. Es hat zwar schon einige Jahre auf dem Buckel, hat sich aber bewährt. Es sichert auch problemlos Installationen mit 100 Datenbanken und mehr. Dumps werden in leicht auffindbaren täglichen, wöchentlichen und monatlichen Ordnern gespeichert. Im weiteren erkläre ich wie ich das Script benutze. Hier bekommt ihr automysqlbackup: https://sourceforge.net/projects/automysqlbackup/
Ihr benötigt aus dem heruntergeladenen Archiv nur die Datei automysqlbackup.
Script einrichten
Man kann natürlich den admin/root Benutzer der Synology benutzen und das Script im Betriebssystem der Rackstation vergraben. Es geht aber auch einfacher. Ich benutze für solche Dinge einen gemeinsamen Ordner ADMIN, dort gibt es für solche Zwecke den Ordner scripte. Dort befindet sich das Bash Script bei mir.
Das Script befindet sich bei mir dann in den folgenden Pfad, den braucht ihr auch später:
/volume1/ADMIN/scripte/automysqlbackup
Einstellungen
Das Script hat wahrlich viele Einstellungen, zu Anzahl von Backups, Paramertern für mysqldump, etc. Wir werden nur 3 benötigen! Daher sparen wir uns auch das anlegen eines extra CONFIG Files. Die folgenden Parameter prüft/ändert ihr in den ersten Zeilen:
CONFIG_mysql_dump_username=root | Der root User, in der Regel ist kein anderer notwendig. |
CONFIG_mysql_dump_password=geheim | Das root Passwort der MySQL / MariaDB. |
CONFIG_backup_dir=“/volume1/BACKUP/synology/mysql“ | Das Zielverzeichniss für die Backups |
CONFIG_mysql_dump_port=3306 | Überprüfen falls ein anderer Port verwendet wird |
USERNAME: Man kann zwar theoretisch auch einen extra User erzeugen, dieser hat aber oft nicht die gleichen Berechtigungen und bei den Systemtabellen kann es zu Warning kommen.
PASSWORD: Nicht mit dem root/admin Passwort der Synology verwechseln! Das Passwort lässt sich in der Anwendung einstellen. (Siehe erstes Bild)
BACKUP_DIR: Dies könnt ihr zu euren gemeinsamen Ordnern anpassen. Ich habe einen Dateiordner mit dem Namen BACKUP, daher sieht die Einstellung bei mir so aus: „/volume1/BACKUP/synology/mysql“
Automatisieren
Nun könnt ihr das Script testen, am besten gleich den entsprechenden Job dafür einrichten. In der Synology Systemsteuerung findet ihr den Punkt Aufgabenplaner. Hier wird der entsprechende cronjob angelegt. Wie häufig ihr das ausführen wollt bleibt euch überlassen. Man kann das wie üblich täglich machen, aber auch stündlich oder zu anderen gewünschten Zeitpunkten. Cronstyle eben… Als Benutzer wird wieder der User root ausgewählt.
Der auszuführende Befehl ist nach meiner Ablagevariante:
bash /volume1/ADMIN/scripte/automysqlbackup
Nach dem Speichern könnt ihr nur mit dem Button „Ausführen“ das Script einmal laufen lassen und kontrollieren ob das Script läuft.
Das Script darf den Fehler „mail: command not found“ werfen, das ist auf der Synology so. Dafür könnt ihr die Benachrichtigungsfunktion der Synology Aufgabe verwenden.
Wenn ihr alles richtig gemacht habt findet ihr am Backup Ziel ab sofort die folgenden Ordner mit Inhalt der echten mySQL Dumps:
Viel Spaß beim einrichten!
MariaDB und MySQL auf einer Diskstation
Auch das ist simpel. Wenn beide Varianten installiert sind „lauschen“ diese auf unterschiedlichen Ports. Welcher Port das ist seht ihr in den Datenbank Einstellungen (Bild 1). Nun benötigt ihr das automysqlbackup Script einfach ein zweites mal und stellt da den anderen Port ein.
Probleme
Wenn ihr ansonsten Probleme mit dem Script habt benutzt SSH, den root User und ruft das Script direkt an der Bash auf. So findet ihr falsche Einstellungen und Probleme einfacher.
Sind zum Bsp. die Ordner vorhanden aber keine Dumps zu finden ist in der Regel das Passwort falsch konfiguriert.
geniale Lösung – vielen Dank.
Wie kann ich nun backups zurückspielen? Einige DBs sind sehr gross. phpMyAdmin geht da leider nicht wirklich mehr.
Zum Zurückspielen benutzt man „mysql“ an der Commandline wie das per default vorgesehen ist. Dafür gibt es endlose Anleitungen im Netz
Meine Synology beschwert sich immer das sie mysql nicht finden kann, woran könnte das liegen? Ich habe MariaDB10 installiert
Eventuell an anderem Port?
Eigentlich nicht, hatte extra die Einstellungen geprüft, es war port 3307
Mit MariaDB10 geht das nicht nur mit MariaDB5
Bei mir funktioniert das auch mit Version 10. Port angepasst?
Vielen Dank für die tolle Anleitung. Dadurch hab ich mein Backup nun noch zusätzlich zum HyperBackup etwas verbessert, was immer gut ist 🙂
Ich musste allerdings eine Anpassung vornehmen, da wohl in der Aufgabenverwaltung der Pfad von der Konfigurationsdatei nicht gefunden werden konnte. Daher musste ich folgendes Skript in der Aufgabenverwaltung verwenden:
bash /volume1/ADMIN/scripts/automysqlbackup /volume1/ADMIN/scripts/automysqlbackup.conf
Zudem musste ich im Konfigurationsfile noch den Pfad zum mysqldump angeben, was bei mir so aussieht:
PATH=/usr/local/mariadb10/bin
Nachdem ich diese Änderungen (inkl. Benutzer und Passwort und Sicherungspfad) gemacht hatte, funktionierte es perfekt. Vielleicht kannst du das noch in deinen Bericht mit aufnehmen, damit andere nicht mehr nach einer Lösung suchen müssen 🙂
Viele Grüße
Michael
Hallo Michael,
kannst du bitte noch mal genauer ausführen wo du den Pfad zum mysqldump noch mit angegeben hast? Im bash-Profil? Oder in der Config-Datei des automysqlbackup?
VG
Martin
Bei mir war hat die Vorgehensweise von Michael ebenfalls zum Ziel geführt.
Auf meiner Synology DS415+ mit DSM6.2 und MariaDB10 ist der Pfad zu mysql und mysqldump ‚/usr/local/mariadb10/bin‘. Diesen musste ich in der Datei ‚automysqlbackup.conf‘ eintragen. Ich habe daher die anderen Anpassungen (z.B. das Passwort und den Port) ebenfalls dort angepasst.
Es gab dann noch eine Fehlermeldung am Ende des Scripts: mysqldump: Got error: 1142: „SELECT, LOCK TABLES command denied to user ‚root’@’localhost‘ for table ‚accounts'“ when using LOCK TABLES“
Nach etwas Recherche habe ich festgestellt, dass die Datenbank ‚performance_schema‘ das Problem verursacht. Diese muss aber gar nicht gesichert werden, da diese live erstellte Werte enthält. Ich habe diese daher in der ‚automysqlbackup.conf‘ ausgeschlossen.
Seitdem läuft es wirklich sehr gut und fehlerfrei. Danke für die guten Tips!