Wie schon berichtet, steht bei mir zu Hause eine Synology DS214+. Nun läuft diese Seite (und auch meine anderen Seiten) alls bei all-inkl. Dort habe ich ein Premium-Paket mit SSH-Zugang. Das Ganze bietet sich natürlich an, um regelmäßig ein Backup des kompletten Servers zu machen und auf der Synology zu speichern. Dabei ist der Plan, täglich die kompletten Daten und auch die mysql-Datenbanken zu sichern.
Was braucht man dafür?
- SSH-Zugang
- Einen Benutzer auf der Synology, welcher mit Key-Authentication auf den Webserver darf (dazu muss für den neuen Benutzer ein Key erstellt werden, welcher auf dem Webserver hinterlegt wird). Wie genau das geht, erklären hunderte von Beiträgen im Netz.
- Etwas Platz auf der DiscStation
Ich habe mir dazu einen neuen Benutzer namens „backup“ (kreativ, oder?) auf der Synology angelegt, welcher als einziger Zugriff auf einen neuen gemeinsamen Ordner Namens „backup“ bekommt. Alle anderen Benutzer dürfen dort nicht schreiben – außer die Administratoren.
Soweit, so gut. Danach habe ich die Datei „backup_webserver.sh“ im Home-Verzeichnis des Backup-Users erstellt und einen neuen Cronjob eingerichtet, welches dieser Datei jeden Tag um 23 Uhr ausführt.
Natürlich ist hinter „sh“ ein Leerzeichen und kein Zeichenumbruch. Die Textbox ist etwas klein geraten!
Der Inhalt der Datei ist dabei relativ simpel:
#!/bin/bash current_date=$(date +"%Y-%m-%d") USER="ssh-w0123456" SERVER="domain.de.w0123456.kasserver.com" PORT="22" SOURCE="/www/htdocs/w0123456/" TARGET="/volume1/backup/$current_date/data/" LOG="/volume1/backup/$current_date/backup_data.log" mkdir /volume1/backup/$current_date rsync -avz --progress -e "ssh -p $PORT" $USER@$SERVER:$SOURCE $TARGET >> $LOG 2>&1
Unter /volume1/backup/ wird nun also jeden Tag ein neues Verzeichnis erstellt, welches den kompletten Inhalt per rsync herunterlädt. Soweit, so gut. Aufräumen muss man noch selbst! Nach mehreren Monaten wird sich hier also ordentlich was ansammeln.
Fehlt noch die Datenbank. Damit wir das Kommando „mysqldump“ nutzen können, muss das Paket „MariaDB“ über die Paketverwaltung installieren. Ich habe den Dienst nach der Installation direkt wieder gestoppt, um Rechenleistung zu sparen. Die entsprechenden Binaries findet man dann unter „/usr/syno/mysql/bin/mysqldump“.
Für alle Datenbanken habe ich eine CSV-Dateie erstellt, welche nach folgendem Schema aufgebaut ist:
benutzer;passwort benutzer;passwort benutzer;passwort benutzer;passwort
Bei all-inkl ist der Benutzername auch immer gleich der Datenbankname – ansonsten bräuchte man noch eine Spalte.
Das Script sieht dann wie folgt aus:
#!/bin/bash current_date=$(date +"%Y-%m-%d") BACKUPDIR="/volume1/backup" MYSQLTARGET="$BACKUPDIR/$current_date/mysql" HOST="domain.de.w0123456.kasserver.com" mkdir ${MYSQLTARGET} OLDIFS=$IFS IFS=";" while read user password do echo "Backing up ${user}" /usr/syno/mysql/bin/mysqldump --opt -h ${HOST} -u${user} -p${password} --databases ${user} | gzip -c -9 > ${MYSQLTARGET}/${user}.gz done < $1 IFS=$OLDIFS
Fertig! Nun dafür auch noch einen Cron einrichten.
Und schon laufen jede Nacht die entsprechenden Jobs!
Aufräumen nicht vergessen!
[asa]B00G6AX604[/asa]
[asa]B00X17ZWB6[/asa]
[asa]B00GK48610[/asa]
Bitte habt Verständnis dafür, dass ich für die genannten Scripte natürlich keine Garantie gebe. Es können sich natürlich immer Fehler einschleichen, welche zu Datenverlust führen. Ich bitte Dich daher, die hier gezeigten Scripte nur einzusetzen, wenn Du genau weißt was Du machst.