Backup erstellen (Ubuntu 16.04 / Debian 8 LAMP)

Backup erstellen mit LAMP

Schritt 1

Um ein Backup deines Root-Servers zu erstellen, logge dich zuerst als Root ein. Hast du dort bereits Apache2, MySQL und PHP (LAMP) installiert? Wunderbar, dann brauchst du nur noch:

apt-get install sshfs
apt-get install rsync
apt-get install percona-toolkit

Schritt 2

Nun lege einzelne Ordner an – für dein Backup, die Logs und Scripte.

Ordner für Backup:

mkdir /mnt/backup/

Ordner, in den Backup-Space gemountet wird:

mkdir /mnt/backup_ftp/

Ordner für Logs:

mkdir /var/log/backup/

Ordner für Scripte:

mkdir /root/scripte/

Schritt 3

Erstelle im nächsten Schritt die Skripte für das Backup und mach diese ausführbar:

Datei „mypasswordfile.sh:

vim /root/scripte/mypasswordfile.sh

Inhalt einfügen & speichern:

#!/bin/bash echo 'mysql_password'

Bitte ersetze „mysql_password“ mit deinem MySQL Passwort.

Datei ausführbar machen:

chmod +x /root/scripte/mypasswordfile.sh

In dieser Datei steckt dein MySQL Passwort. Dieses benötigst du, um später den MySQL-Dump zu erstellen.

Datei „sftpbackup.batch“:

vim /root/scripte/sftpbackup.batch

Inhalt einfügen & speichern:

put /mnt/full_backup.tar.gz /backup_ftp/
exit

Datei ausführbar machen:

chmod +x /root/scripte/sftpbackup.batch

Mit dieser Datei kannst du dein neues Backup auf einen externen Backup-Space verschieben.

Datei „backupscript.sh“:

vim /root/scripte/backupscript.sh

Inhalt einfügen & speichern:

#!/bin/bash
ERRORLOG="/var/log/backup/full_backup.err"
INFOLOG="/var/log/backup/full_backup.log"
BACKUPPATH="/mnt/backup/"
#SERVERNAME_VROOT="vrxxxxx@backup.myvrootserver.com:/"
#SERVERNAME_DROOT="drxxxxx@backup.mydrootserver.com:/"

DATE=$(date +%Y%m%d-%H:%M:%S);
echo "${DATE} - Backup start" >> ${INFOLOG};

rsync -aAXz --numeric-ids --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / ${BACKUPPATH} 1>/dev/null 2>> ${ERRORLOG}
if [[ $? == 0 ]]; then
  DATE=$(date +%Y%m%d-%H:%M:%S);
  echo "${DATE} - local rsync success" >> ${INFOLOG};
else
  DATE=$(date +%Y%m%d-%H:%M:%S);
  echo "${DATE} - local rsync failed" >> ${INFOLOG};
fi

DATABASES=$(mysql -ss -uroot -p$(/root/scripte/mypasswordfile.sh) -e "SHOW DATABASES;" 2> /dev/null)
if [[ $? == 0 ]]; then
  # create dump dir if not exist
  if [[ ! -d ${BACKUPPATH}var/lib/mysql/dbdumps ]]
  then
     mkdir ${BACKUPPATH}var/lib/mysql/dbdumps/ 1>/dev/null 2>> ${ERRORLOG};
  fi
  # dump all databases
  for DB in ${DATABASES}; do
     mysqldump -uroot -p"$(/root/scripte/mypasswordfile.sh)" --databases ${DB} > ${BACKUPPATH}var/lib/mysql/dbdumps/${DB}.sql 2>> ${ERRORLOG};
  done
  #dump grants with recovery friendly preformatted pt output
  pt-show-grants -uroot -p"$(/root/scripte/mypasswordfile.sh)" > ${BACKUPPATH}/var/lib/mysql/dbdumps/GRANTS.sql 2>> ${ERRORLOG};
fi

tar -czf /mnt/full_backup.tar.gz /mnt/backup/ 2>> ${ERRORLOG}
if [[ $? == 0 ]]; then
  sftp -i /root/.ssh/id_rsa -b /root/scripte/sftpbackup.batch ${SERVERNAME_VROOT} 1>/dev/null 2>> ${ERRORLOG};
fi

if [[ $? != 0 ]]; then
  DATE=$(date +%Y%m%d-%H:%M:%S);
  echo "${DATE} - Backup failed. Last error code: $?" >> ${INFOLOG};
else
  DATE=$(date +%Y%m%d-%H:%M:%S)
  echo "${DATE} - Backup finish" >> ${INFOLOG};
fi

Datei ausführbar & mountbar machen:

chmod +x /root/scripte/backupscript.sh

Mit dieser Datei erstellst du dein Backup.

Schritt 4

Für welchen Dedicated Rootserver oder Virtual Root Server möchtest du das Backup erstellen? Passe hierzu die Zeilen entsprechend an und entferne die „#“.

Datei „backupscript.sh“ öffnen:

vim /root/scripte/backupscript.sh

Datei „backupscript.sh“ bearbeiten:

SERVERNAME_VROOT="vr12345@backup.myvrootserver.com:/"
#SERVERNAME_DROOT="drxxxxx@backup.mydrootserver.com:/"

Schritt 5

Welche Verzeichnisse oder Dateien möchtest du bei deinem Backup ausschließen? Automatisch eingestellt sind:

/dev
/proc
/sys
/tmp
/run
/mnt
/media
/lost+found

Du möchtest diese Liste ändern oder erweitern? Das erledigst du ganz leicht über die Zeile exclude. Alle hier nicht genannten Verzeichnisse und Dateien landen in deinem Backup. Auch Dumps von allen Datenbanken.

Schritt 6

Damit du beim Übertragen deines Backups über FTP auf das Passwort verzichten kannst, brauchst du noch den passenden Schlüssel. Erstell diesen mit „ssh-keygen“ und übertrage ihn dann auf den Backup-Server.

Ein Tipp: Bestätige einfach alle Aufforderungen mit „Enter“ – das reicht aus.

Schlüssel erstellen:

ssh-keygen -b 4096

Backup-Space mounten:

sshfs vrxxxxx@backup.myvrootserver.com:/ /mnt/backup_ftp/

Passwort für FTP-Backup-Space eingeben.

Und falls du dein Passwort vergessen hast: Kundencenter > Administration > Backup > Passwort ändern.

Schlüssel kopieren und einfügen:

cat /root/.ssh/id_rsa.pub > /mnt/backup_ftp/.ssh/authorized_keys

Nun kannst du den FTP-Backup-Space in deinem Filesystem einbinden – es funktioniert jetzt ohne Passwort. Du möchtest dies einmal testen? Das geht so:

1. Hänge den FTP-Backup-Space aus:

fusermount -u /mnt/backup_ftp

2. Hänge den FTP-Backup-Space wieder ein:

sshfs vrxxxxx@backup.myvrootserver.com:/ /mnt/backup_ftp/

Schritt 7

Und direkt ein zweiter Test – für Ihr Backup. Führen Sie dazu folgendes Skript aus:

/root/scripte/backupscript.sh

Funktioniert alles wie gewünscht? Sehr gut, dann weiter zum nächsten Schritt.

Schritt 8

Damit Ihr Backup künftig auch automatisch startet, erstellen Sie nun einen Cronjob.

Datei anlegen und bearbeiten:

vim /etc/cron.d/backup

Folgende Zeile einfügen und speichern:

30 3 * * * root /root/scripte/backupscript.sh

So startet Ihr Backup täglich um 03:30 Uhr – oder geben Sie einfach am Anfang der Zeile Ihre persönliche Wunschzeit ein.

Backup wiederherstellen mit LAMP

Dein Server hatte einen Ausfall und du benötigst dein Backup? Gerne – so funktioniert es:

Schritt 1

Schritt 1

Logge dich zuerst als Root ein. Du hast dort bereits Apache2, MySQL und PHP (LAMP) installiert? Wunderbar, dann brauchst du nur noch:

apt-get install sshfs
apt-get install rsync

Schritt 2

Lege nun die erforderlichen Datenbanken und MySQL-Benutzer an. Wichtig hierbei: Nutze den gleichen Datenbank- und Benutzernamen wie auf deinem ausgefallenen System.

MySQL starten und das MySQL Passwort eingeben:

mysql -u root -p

Datenbank anlegen:

create database if not exists datenbank1;
create database if not exists datenbank2;
create database if not exists datenbank3;
…

Benutzer erstellen:

create user 'benutzer'@'localhost' identified by 'pw_fuer_benutzer';

Berechtigung für den Benutzer anlegen:

grant all privileges on datenbank1.* to 'benutzer'@'localhost';
grant all privileges on datenbank2.* to 'benutzer'@'localhost';
grant all privileges on datenbank3.* to 'benutzer'@'localhost';
…
flush privileges;

Abmelden:

quit;

Schritt 3

Wohin soll dein Backup gemountet werden? Erstell dazu einen beliebigen neuen Ordner – zum Beispiel „/mnt“:

mkdir /mnt/backup_ftp

Schritt 4

Verbinde nun den FTP-Backup-Space mit deinem neuen Ordner:

sshfs vrxxxxx@backup.myvrootserver.com:/backup /mnt/backup_ftp

Gib dann das Passwort für deinen FTP-Backup-Space ein. Falls du es vergessen hast: Kundencenter > Administration > Backup > Passwort ändern.

Schritt 5

Jetzt kannst du dein Backup auf den Server kopieren und entpacken:

mkdir /mnt/backup
cp -r /mnt/backup_ftp/* /mnt/backup
cd /mnt/backup
tar -xvzf full_backup.tar.gz

Schritt 6

Damit du sicher sein kannst, dass es vollständig ist, lohnt sich ein prüfender Blick auf dein Backup samt MySQL-Dumps:

cd /mnt/backup/mnt/backup

Ist alles okay? Dann stelle jetzt deine Dateien wieder her – zum Beispiel mit „Rsync“:

rsync –delete -av <Quelle> <Ziel>

Schritt 7

Du möchtest dein CMS wiederherstellen – zum Beispiel Wordpress? Das erledige es mit dem Inhalt der Datei „var/www/html/“:

rsync --delete -av /mnt/backup/mnt/backup/var/www/html/ /var/www/html/

Schritt 8

Der letzte Schritt holt deine MySQL-Dumps wieder an Bord:

mysql --host=localhost --user=user --password=passwort -vvf datenbank1 < /mnt/backup/mnt/backup/var/lib/mysql/dbdumps/datenbank1.sql

Jetzt sollte alles wieder perfekt laufen. Du möchtest weitere individuelle Ordner oder Dateien übertragen? Auch das erledigst du mit „Rsync“ schnell und bequem.