[phpmyadmin] Automatisiertes Backup

Status
Für weitere Antworten geschlossen.

maalik

Benutzer
Mitglied seit
05. Feb 2016
Beiträge
708
Punkte für Reaktionen
11
Punkte
38
Hallo,

ich würde gerne meine MariaDB/phpMyAdmin automatisch sichern lassen. Sowas sollte ja über cronjobs gut funktionieren, bloß wie rufe ich das bei Synology auf, inbesondere in Hinblick auf das Kommando und Logindaten bei phpMyAdmin?

Liebe Grüße
 

4bob

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
604
Punkte für Reaktionen
2
Punkte
38
Hi,

für automatisierte Jobs einzurichten verwendest du am besten den Aufgabenplaner |Wissensdatenbank | Synology Inc.
phpMyAdmin verwende ich nicht; Aber hier hat jemand ein fertiges Skript erstellt um die Backups ganz nach deiner Vorstellung damit zu automatisieren ? https://github.com/qubitstream/phpmyadmin_sql_backup

Benötigt Python 3.

Empfehlen kann ich den mysqldumper
Der unter perl einen Backup-Script mitbringt und eingeschränkt ,ohne Email Benachrichtigung (Stichwort Mime::Lite), auch auf der DS auf Anhieb läuft.
Wenn es nur um eine Datenbank geht ist das zu verkraften denn der Aufgabenplaner scheint die Logfiles über die Email Benachrichtigung auf 30 Zeilen zu begrenzen.

Alternativ lassen sich Backup's einer oder aller Datenbanken mit mysqldump realisieren.
Das bringt der MariaDB Server mit und ist in der Anwendung einfach:

mysqldump –u [Benutzername] –p[Passwort] [Datenbankname] > [Sicherungsdatei]

Das könnte dann so für owncloud aussehen:

Rich (BBCode):
/usr/bin/mysqldump -u backup-user -pDASpAssWort owncloud > /volume1/DATA_R1/Backup-MySQL/owncloud.sql
Je nach DB Größe das am besten gleich Zippen:
Rich (BBCode):
/usr/bin/mysqldump -u backup-user -pDASpAssWort owncloud | gzip -c -9 > /volume1/DATA_R1/Backup-MySQL/owncloud.gz

Ich hab einen backup-user erstellt, es geht natürlich auch mit root.

Es existiert in Wiki bereits ein Artikel der fürs DSM 5 geeignet ist aber mit ein paar Änderungen auch auf DSM 6 läuft. (/usr/bin/mysqldump) ;)
Damit können X Versionen gespeichert werden bis er wieder anfängt die älteste zu löschen, aber alles in ein dump-file zu pressen ist unnötiger Stress im Recoverfall :D

Viel Erfolg.

Bob
 

maalik

Benutzer
Mitglied seit
05. Feb 2016
Beiträge
708
Punkte für Reaktionen
11
Punkte
38
Hey Bob! Danke für die ausführliche Antwort. Ich denke ich werde mysqldump nutzen, das kann man ja einfach in den Aufgabenplaner eingeben oder?
Falls ja: Gibt es eine Möglichkeit, den Dump nach Tag & Uhrzeit zu benennen?
Und zu guter letzt: Ist das Absicht, dass nach -p kein Leerzeichen beim Passwort kommt?

lg
maalik
 

4bob

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
604
Punkte für Reaktionen
2
Punkte
38
Hi,

Top sehr gute Wahl :) Ja der Aufruf im DSM Aufgabenplaner ist sehr simpel.
Du erstellst dir ein Shell Skript das du an den Ort deiner Wahl ablegst. Es muss ausführbar sein ;)

z.B. /volume1/homes/admin/db-backup.sh

Darin wird er „dumper call“ dann so aussehen:

Rich (BBCode):
#!/bin/bash
perl /volume1/web/sqldumper/msd_cron/crondump.pl -config=mysqldumper -html_output=0

Du musst nur darauf achten das die Config mit dem richtigen Namen aufgerufen wird &
der Verzeichnispfad zum Webshare stimmt.

Ja klar, der mysqldumper speichert perfekt nach Datum und Uhrzeit. Du kannst mit einem Job alle DB‘s sicher. Dabei wird jede für sich in einem ZIP abgelegt. Damit das nicht Überhand nimmt und die Platte vollmüllt hälst du hier nur die letzten 5 die älteren werden dann automatisch gelöscht.

Und sehr aufmerksam beobachtet; Ja das -p hat kein Leerzeichen beim Passwort und wird dann 1:1 angenommen; Hat es ein Leerzeichen läuft das Backup nicht da jetzt ein Passwort Prompt gesendet wird das ein Batchjob nicht beantworten kann ;)
Das brauchst du jetzt mit dem Einsatz vom mysqldumper aber nicht.

Bob
 

4bob

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
604
Punkte für Reaktionen
2
Punkte
38
Jetzt hab ich gepennt, sorry :rolleyes:
Wenn nur über die Binaries mysqldump arbeiten willst musst du dir das Skript [WIKI] ansehen was ich verlinkt habe.
 

maalik

Benutzer
Mitglied seit
05. Feb 2016
Beiträge
708
Punkte für Reaktionen
11
Punkte
38
Hey bob, ich nochmal. Ich würde das gerne, wenn möglich, nur über den Aufgabenplaner durchführen, dann brauch ich keinen Extra Ordner, wo ich das Skript speicher.
Wenn ich dort jedoch als Dateinamen
/volume1/backup/ownclouddump-${DATE}.gz

eingebe, erhalte ich lediglich die Datei
ownclouddump-.gz

Geht das dann nur per Skript, dass er den DATE-Aufruf umwandelt?
Und was wäre denn die Eingabe anstelle von owncloud, wenn er alle Datenbanken speichern soll. lediglich *?
 

4bob

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
604
Punkte für Reaktionen
2
Punkte
38
Richtig; Die Wünsche die du hast lassen sich am schnellsten in einem Skript realisieren.

$DATE ist eine Variable die er nicht kennt; wenn du auf der Konsole

Rich (BBCode):
date

eingibt bekommst du auch eine Ausgabe.
Baust du das in einen Dateiname, ohne es vorher festzulegen, kann das nicht identifiziert werden als solches und es bleibt leer.

Es ist aber sehr einfach -->

Rich (BBCode):
#!/bin/bash
#Variable Definition Datum
DATE=`date +%Y%m%d%H%M%S`

#Hier die Ausgabe
echo $DATE

Möchtest du alle Datenbanken sichern, kennt er das Wildcard * nicht! Aber --all-databases

Rich (BBCode):
/usr/bin/mysqldump -u backup-user -pDASpAssWort --all-databases | gzip -c -9 > /volume1/DATA_R1/Backup-MySQL/MySQL-FullDump.gz

Bob
 

maalik

Benutzer
Mitglied seit
05. Feb 2016
Beiträge
708
Punkte für Reaktionen
11
Punkte
38
also ich habe jetzt folgenden aufruf im aufgabenplaner:
Rich (BBCode):
sh /volume1/backup/mysqlbackup.sh

und folgendes skript:

Rich (BBCode):
#!/bin/bash
#
# dieses Skript kann man beliebig oft ausführen
#
# Anzahl der Sicherungen die aufgehoben werden sollen
KEEP=100
BACKUPS=`find /volume1/backup -name "mysqldump-*.gz" | wc -l | sed 's/\ //g'`
while [ $BACKUPS -ge $KEEP ]
do
ls -tr1 /volume1/backup/mysqldump-*.gz | head -n 1 | xargs rm -f 
BACKUPS=`expr $BACKUPS - 1` 
done
DATE=`date +%Y%m%d%H%M%S`
rm -f /volume1/backup/.mysqldump-${DATE}.gz_INPROGRESS

/usr/bin/mysqldump -u root -pPASSWORT --all-databases | gzip -c -9 > /volume1/backup/.mysqldump-${DATE}.gz_INPROGRESS

mv -f /volume1/backup/.mysqldump-${DATE}.gz_INPROGRESS /volume1/backup/mysqldump-${DATE}.gz
exit 0

aber wenn ich im aufgabenplaner das skript direkt ausführe, passiert nichts. siehst du den fehler?
 

4bob

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
604
Punkte für Reaktionen
2
Punkte
38
Lass bitte mal das sh weg im Aufgabenplaner; nur
Rich (BBCode):
/volume1/backup/mysqlbackup.sh

Hast du es ausführbar gemacht ? Poste doch bitte mal
Rich (BBCode):
cd /volume1/backup
ls -l |grep mysqlbackup.sh

Du kannst in der Konsole das Skript auch ausführen dann solltest du auch Fehlermeldungen erhalten:
Rich (BBCode):
sh /volume1/backup/mysqlbackup.sh

Was willst du mit 100 Dump‘s ?? Max. 10, meinst du nicht ?
Und du solltest das Skript nicht ins Backup-Verzeichnis legen, wenn du mal aufräumst löscht sich das schnell mit weg :)

Bob
 

maalik

Benutzer
Mitglied seit
05. Feb 2016
Beiträge
708
Punkte für Reaktionen
11
Punkte
38
-rwx------ 1 maalik users 659 Aug 5 18:33 mysqlbackup.sh
Naja, habe mal 100 Dumps zum testen eingestellt. Schaden tuts ja auch nicht :D die paar MByte.

Ohne sh geht es auch nicht. Und was meinst du mit aufräumen? Manuell? Da passe ich schon drauf auf. Oder meinst du wegen dem Skript selbst, wenn es irgendwie aufräumt?
 

4bob

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
604
Punkte für Reaktionen
2
Punkte
38
Macht der Gewohnheit hab eben einen Bereich in der sich meine Skripte tummeln :D
Und ja manuelles aufräumen; da wird schon mal schnell alles gelöscht.

Versuch es nochmal damit:

Rich (BBCode):
chmod 775 /volume1/backup/mysqlbackup.sh

anschließen sollte es laufen ;)

Bob
 

maalik

Benutzer
Mitglied seit
05. Feb 2016
Beiträge
708
Punkte für Reaktionen
11
Punkte
38
anschließen sollte es laufen
tut es leider nicht. wie immer keine reaktion. berechtigungen wurden aber erfolgreich geändert.
 

4bob

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
604
Punkte für Reaktionen
2
Punkte
38
und auf der Konsole gestartet ?
Rich (BBCode):
sh /volume1/backup/mysqlbackup.sh
 

maalik

Benutzer
Mitglied seit
05. Feb 2016
Beiträge
708
Punkte für Reaktionen
11
Punkte
38
Rich (BBCode):
/volume1/backup/mysqlbackup.sh: line 20: syntax error: unexpected end of file

zeile 20 existiert ja gar nicht? o_O
 

4bob

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
604
Punkte für Reaktionen
2
Punkte
38
Ja, da stimmt was nicht.
Welchen Editor hast du verwendet ?
 

maalik

Benutzer
Mitglied seit
05. Feb 2016
Beiträge
708
Punkte für Reaktionen
11
Punkte
38
Notepad++
 

4bob

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
604
Punkte für Reaktionen
2
Punkte
38
der ist auch auf UTF-8 eingestellt?
 

maalik

Benutzer
Mitglied seit
05. Feb 2016
Beiträge
708
Punkte für Reaktionen
11
Punkte
38
Auf UTF-8 ohne BOM

In Vi ist am Ende der Datei aber auch nichts merkwürdiges zu erkennen...
 

maalik

Benutzer
Mitglied seit
05. Feb 2016
Beiträge
708
Punkte für Reaktionen
11
Punkte
38
Habe in Vi einfach eine neue leere Datei erstellt, Inhalt kopiert, jetzt geht es :)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat