Backup erstellen (Ubuntu 16.04/Debian 8 LAMP)

Backup erstellen mit LAMP

Schritt 1

Um ein Backup Ihres Root-Servers zu erstellen, loggen Sie sich zuerst als Root ein. Haben Sie dort bereits Apache2, MySQL und PHP (LAMP) installiert? Wunderbar, dann brauchen Sie nur noch:


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

Schritt 2

Legen Sie nun einzelne Ordner an – für Ihr Backup, die Logs und Scripte.

Ordner für Backup:


mkdir /mnt/backup/

Ordner, in den Ihr 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

Erstellen Sie im nächsten Schritt die Skripte für das Backup und machen Sie diese ausführbar:

Datei „mypasswordfile.sh:


vim /root/scripte/mypasswordfile.sh

Inhalt einfügen & speichern:


#!/bin/bash

echo 'mysql_password'

Bitte ersetzen Sie „mysql_password“ mit Ihrem MySQL Passwort.

Datei ausführbar machen:


chmod +x /root/scripte/mypasswordfile.sh

In dieser Datei steckt Ihr MySQL Passwort. Dieses benötigen Sie, 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 können Sie Ihr neues Backup auf Ihren 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 erstellen Sie Ihr Backup.

Schritt 4

Für welchen Dedicated Rootserver oder Virtual Root Server möchten Sie das Backup erstellen? Passen Sie hierzu die Zeilen entsprechend an und entfernen Sie 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öchten Sie bei Ihrem Backup ausschließen? Automatisch eingestellt sind:


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

Sie wollen diese Liste ändern oder erweitern? Das erledigen Sie ganz leicht über die Zeile exclude. Alle hier nicht genannten Verzeichnisse und Dateien landen in Ihrem Backup. Auch Dumps von allen Datenbanken.

Schritt 6

Damit Sie beim Übertragen Ihres Backups über FTP auf Ihr Passwort verzichten können, brauchen Sie noch den passenden Schlüssel. Erstellen Sie diesen mit „ssh-keygen“ und übertragen Sie ihn dann auf den Backup-Server.

Ein Tipp: Bestätigen Sie 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 Sie Ihr Passwort vergessen haben: Kundencenter > Administration > Backup > Passwort ändern.

Schlüssel kopieren und einfügen:


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

Nun können Sie Ihr FTP-Backup-Space in Ihr Filesystem einbinden – es funktioniert jetzt ohne Passwort. Sie möchten dies einmal testen? Das geht so:

1. Hängen Sie den FTP-Backup-Space aus:


fusermount -u /mnt/backup_ftp

2. Hängen Sie 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/mypasswordfile.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

Ihr Server hatte einen Ausfall und Sie benötigen Ihr Backup? Gerne – so funktioniert es:

Schritt 1

Loggen Sie sich zuerst als Root ein. Haben Sie dort bereits Apache2, MySQL und PHP (LAMP) installiert? Wunderbar, dann brauchen Sie nur noch:


apt-get install sshfs
apt-get install rsync

Schritt 2

Legen Sie nun die erforderlichen Datenbanken und Ihren MySQL-Benutzer an. Wichtig hierbei: Nutzen Sie den gleichen Datenbank- und Benutzernamen wie auf Ihrem 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 Ihr Backup gemountet werden? Erstellen Sie dazu einen beliebigen neuen Ordner – zum Beispiel „/mnt“:


mkdir /mnt/backup_ftp

Schritt 4

Verbinden Sie nun den FTP-Backup-Space mit Ihrem neuen Ordner:


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

Geben Sie dann das Passwort für Ihren FTP-Backup-Space ein. Falls Sie es vergessen haben: Kundencenter > Administration > Backup > Passwort ändern.

Schritt 5

Jetzt können Sie Ihr 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 Sie sicher sein können, dass es vollständig ist, lohnt sich ein prüfender Blick auf Ihr Backup samt MySQL-Dumps:


cd /mnt/backup/mnt/backup

Ist alles okay? Dann stellen Sie jetzt Ihre Dateien wieder her – zum Beispiel mit „Rsync“:


rsync –delete -av <Quelle> <Ziel>

Schritt 7

Sie möchten Ihr CMS wiederherstellen – zum Beispiel Wordpress? Das erledigen Sie 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 Ihre 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. Sie möchten weitere individuelle Ordner oder Dateien übertragen? Auch das erledigen Sie mit „Rsync“ schnell und bequem.

War diese Antwort hilfreich?