Heute möchte ich kurz beschreiben, wie ich die Daten von meinen Ubuntu-Systemen sichere. Ich nutze dazu Borg (oder auch BorgBackup bezeichnet), da dieses recht einfach zu benutzen ist und kostenfrei ist. Beginnen wir mit der Konfguration.
Der Backup Server
Der Backup-Server kümmert sich um die Speicherung und Verwaltung der Backup-Daten. Das System ist ebenfalls ein Ubuntu in der aktuellen LTS-Version. Die Installation funktioniert wie gewohnt mit apt.
sudo apt update && sudo apt install borgbackup -y
Nach der Installation habe ich einen eigenen Benutzer angelegt, mit dem das Backup durchgeführt wird.
sudo adduser borgbackup
Nun muss ein neuer Ordner erzeugt werden, in dem die Backup-Daten gespeichert werden. Pro Server verwende ich einen eigenen Unterordner, um eine genaue Zuordnung der Dateien zu haben. Nach der Erstellung des Ordners muss dieser einmalig initialisiert werden.
mkdir -p /home/borgbackup/backups/serverA borg init /home/borgbackup/backups/serverA
Denken Sie daran, dass der borgbackup-Benutzer schreibenden Zugriff auf dieses Verzeichnis benötigt. Nun sind wir erst einmal mit der Installation fertig und wechseln auf den ersten Server, der gesichert werden soll.
Die Einrichtung des Backups auf dem ersten Server
Auf dem ersten Server, den wir sichern möchten, muss natürlich auch die Installation von Borg gemacht werden.
sudo apt update && sudo apt install borgbackup -y
Nach der Installation generieren wir uns für den root-Benutzer ein Schlüsselpaar, mit dem wir uns später am Backup-Server authentifizieren können.
sudo ssh-keygen -a 100 -t ed25519
Der Schlüssel wird standardmäßig unter
/root/.ssh
abgespeichert. Wir müssen nun den öffentlichen Teil des Schlüssels auf dem Backup-Server eintragen, damit ein Zugriff per Key möglich ist. Öffnen Sie dazu die Datei id_ed25519.pub und fügen Sie den Inhalt auf dem Backup-Server in der folgenden Datei ein:
/home/borgbackup/.ssh/authorized_keys
Nun muss das eigentliche Backup-Skript erstellt werden, was die Daten und ggf. Datenbanken sichert. Ich halte mich hier an den Beitrag von Thomas Leister Server-Backups mit Borg: So sichere ich meine Server, habe aber die Syntax angepasst, da ich Probleme mit dem Aufruf des Skripts hatte und ein paar Schritte (unter anderem für mich selbst) etwas ausführlicher beschreibe.
#!/bin/bash ## Variablen LOG="backup.log" HOST="<Hostname>" REPOSITORY="ssh://borgbackup@<Servername>:22//home/borgbackup/backups/"$HOST ## Log-Ausgabe exec > >(tee -i ${LOG}) exec 2>&1 echo "###### Starting backup on $(date) ######" ## Liste der installierten Software dpkg --get-selections > /root/backup/software.list ## Datenbanken echo "Creating database dumps ..." /bin/bash /root/backup/dbdump.sh ## Dateien und Ordner echo "Syncing backup files ..." borg create -C lzma,9 -v --stats $REPOSITORY::'{now:%Y-%m-%d_%H:%M}' \ /root/backup \ /etc \ /var/www echo "###### Finished backup on $(date) ######"
Dieses Script erzeugt eine Liste der installierten Software, macht einen Dump von gewünschten Datenbanken mit Hilfe von einem eigenen Skript und sichert sämtliche Daten in den Verzeichnissen in Zeile 24 bis 26. Dieses Skript kann natürlich noch beliebig erweitert werden.
Denken Sie daran, dass Skript ausführbar zu machen!
chmod u+x /root/backup/backup.sh
Das Backup der Datenbanken
Während dem Aufruf des Backup-Skripts wird ein zweites Skript ausgeführt, welches sich um die Datenbanken auf dem System kümmert. Diese Datei sieht in meinem Fall wie folgt aus.
#!/bin/bash DBUSER="backup" DBPASSWD="geheimeskennwort" DBBAKPATH="/root/backup/dbdumps/" DBS="wordpress phpmyadmin" for DBNAME in $DBS; do echo "Creating backup for database $DBNAME" && mysqldump -u $DBUSER -p$DBPASSWD $DBNAME > $DBBAKPATH"$DBNAME.sql"; done
Die beiden Datenbanken wordpress und phpmyadmin werden in das Verzeichnis /root/backup/dbdumps kopiert, welches wiederum dann in dem Borg-Backup enthalten ist.
Auch dieses Skript muss ausführbar sein!
chmod u+x /root/backup/dbdump.sh
Das Anlegen des Datenbank-Backup-Benutzers
Um das Datenbank-Skript erfolgreich ausführen zu können, muss der angegebene Benutzer vorhanden sein. Diesen kann man auf der Konsole wie folgt anlegen:
mysql -u root -p create user 'backup'@'localhost' identified by 'geheimeskennwort'; grant SELECT, RELOAD, LOCK TABLES, REPLICATION CLIENT, SHOW VIEW, EVENT, TRIGGER on *.* to 'backup'@'localhost'; quit;
Das erste Backup
Um zu prüfen, ob ein Backup nun funktioniert, kann das Backup-Skript nun per Hand aufgerufen werden. Beim ersten Aufruf wird gefragt, ob der SSH-Schlüssel im Speicher abgelegt werden darf. Bestätigen Sie dies, danach erscheint kein weiterer Aufruf. Klappt nun alles, wird das erste Backup erzeugt und auf dem Backup-Server gespeichert.
Automatisierung des Backups
Damit automatisch ein Backup erzeugt wird (z.B. jede Nacht), muss ein Cronjob angelegt werden. Hierzu führen wir ein crontab als root aus:
crontab -e
Am Ende des datei fügen wir nun unser Backup-Skript hinzu mit der gewünschten Zeit. In meinem Fall soll das Backup jeden Abend um 22 Uhr laufen.
# BorgBackup 0 22 * * * /root/backup/backup.sh > /dev/null 2>&1
Fazit
Im ersten Teil haben wir gelernt, wie man ein Backup mit Borg einrichtet. Im zweiten Teil widmen wir uns den erweiterten Optionen, dem Aufräumen von veralteten Backups, einer zusätzlichen Absicherung der SSH-Verbindung sowie einem möglichen Restore der Daten.
Pingback:Ubuntu Backup mit BorgBackup - Teil 2 - Jans kleiner Blog