WordPress Backup mit rsync über ssh
ich hatte vor einiger zeit mal einen Artikel über das Backup-Erstellen geschrieben. Nachteil dieser Methode von damals ist sicher der enorme Speicherbedarf, der dabei entsteht. Hatte mir innerhalb weniger Wochen die komplette Platte zugeknallt. Da ist doch eine Anpassung angesagt gewesen.
Heute war es dann so weit und ich setzte mich daran ein Backupsystem zu erstellen das über rsync läuft und nicht so viel Datenmenge kreiert.
rsync erste Wahl beim Backup erstellen
rsync ist ein Programm, um Dateien zwischen lokalen oder über das Netzwerk erreichbaren Pfaden abzugleichen. Dabei werden zunächst die Größe und die Erstellungszeit der Dateien in Quelle und Ziel verglichen, so dass nur die Dateien behandelt werden müssen, bei denen es Änderungen gegeben hat. Sind Quelle und Ziel lokale Pfade, werden die betroffenen Dateien normal kopiert. Wenn auf Quelle oder Ziel aber per SSH oder über einen speziellen rsync-daemon zugegriffen wird, nutzt rsync zusätzlichen noch einen speziellen Delta-Transfer-Algorithmus, so dass nur die geänderten Teile der Dateien über das Netzwerk transportiert werden müssen.
Quelle: http://wiki.ubuntuusers.de/Startseite
Also rsync passt wie die Faust aufs Auge wenn es darum geht Sicherungen zu erstellen.
Wenn man also ein Verzeichnis, mittels SSH auf einen andern Server, kopieren will. Schaut der Befehl so aus:
# rsync -avze ssh /zu/kopierendes/verzeichnis benutzer@entfernterserver.de:/ziel/auf/server
Als bequemer Mensch will ich Automatismus
Genau, jeden Tag einen Cronjob um Mitternacht plus email was alles getan wurde.
SSH einrichten
Zuerst müssen wir also eine Authentifizierung über Public-Keys erstellen damit wir kein Passwort brauchen.
# ssh-keygen -t rsa
erstellt ein Schlüsselpaar. Bei dem wir die Passphrase leer lassen. Dann müssen wir den Schlüssel übertragen.
# ssh-copy-id -i ~/.ssh/id_rsa.pub benutzer@entfernterserver.de
Script erstellen
Jetzt brauchen wir noch ein Script, da es mir hier hauptsächlich darum geht ein WordPress Backup zu erstellen muss man auch die sql Tabelle mit sichern.
Starten des Editors
# nano /root/rsyncer
Folgenden Script eintragen. Natürlich an die eigenen Gegebenheiten anpassen.
#!/bin/sh #mysql datenbanken exporieren. mysqldump DATENBANKNAME -u MYSQLBENUTZERNAME -pPASSWORT > /var/www/wordpressbackup.sql #rsync des Webverzeichnisses inc. logdatei erstellen rsync -avze ssh /var/www/ benutzer@entfernterserver.de:/ziel/auf/server > /root/rsyncausgabe #logdatei mailen mail -s "rsync Ausgabe" meine@mailadresse.de < /root/rsyncausgabe
Erklärung:
Zuerst wird die mysql Tabelle in das zu sichernde Verzeichnis exportiert.
Dann wird alles übertragen und die Ausgabe in die Datei rsyncausgabe geschrieben. Diese wird wiederum als Mail an mich versendet.
Jetzt nur noch Benutzer und Rechte anpassen und das Script ausführbar machen
# chown root:root /root/rsyncer
# chmod 770 /root/rsyncer
Täglichen cronjob erstellen
Nun ist das Script erstellt und es kann ein cronjob eingerichtet werden. Wer nicht den vi Editor für crontab -e benutzen will, für den hab ich hier eine Anleitung geschrieben wie man auf den nano Editor wechselt.
Als root ausführen:
# crontab -e
und folgendes in die Tabelle um “@daily /root/rsyncer” erweitern
# Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command @daily /root/rsyncer
Damit wird jeden Tag, Punkt Mitternacht ein Backup unseres WordPress oder anderes erstellt.