Nextcloud Backups erstellen und wiederherstellen
Orginalquelle: https://decatec.de/home-server/nextcloud-backups-erstellen-und-wiederherstellen-manuell-oder-per-skript
Grundsätzliches Vorgehen
Eine komplette Nextcloud-Instanz besteht immer aus drei Teilen:
Das Web-Verzeichnis von Nextcloud (z.B. /var/www/nextcloud) Das Daten-Verzeichnis (z.B. /var/nextcloud_data) Die Nextcloud-Datenbank
Backup und Restore Manuel
Backup erstellen
Um ein Backup zu erstellen, sollte die Nextcloud-Instanz zunächst in dem Maintenance-Mode versetzt werden. Das sorgt dafür, dass kein Benutzer aktiv auf der Cloud arbeiten kann.
cd /var/www/nextcloud sudo -u www-data php occ maintenance:mode --on
Als nächstes müssen das Hauptverzeichnis von Nextcloud gesichert werden. Dies ist im Normalfall unter /var/www/nextcloud zu finden (bitte den Punkt am Ende der Zeile beachten):
tar -cpzf /mnt/Share/Backups/Nextcloud/NextcloudBackup_FileDir_`date +"%Y%m%d"`.tar.gz -C /var/www/nextcloud .
Neben dem Nextcloud-Verzeichnis muss auch das Datenverzeichnis von Nextcloud mit in das Backup einfließen. Dieses sollte idealerweise außerhalb des Web-Verzeichnisses liegen (z.B. unter /var/nextcloud_data). Auch hist wieder ein Punkt am Ende des Befehls:
tar -cpzf /mnt/Share/Backups/Nextcloud/NextcloudBackup_DataDir_`date +"%Y%m%d"`.tar.gz -C /var/nextcloud_data .
Nun muss nur noch die Datenbank der Nextcloud-Installation gesichert werden. Dies geschieht mit folgendem Befehl:
mysqldump --single-transaction -h localhost -u nextcloud_db_user -p nextcloud_db > /mnt/Share/Backups/Nextcloud/NextcloudBackup_DB_`date +"%Y%m%d"`.sql
Nun ist das Backup komplett, so dass Benutzer wieder mit der Cloud arbeiten können. Daher wird der Maintenance-Modus wieder beendet:
cd /var/www/nextcloud sudo -u www-data php occ maintenance:mode --off
Backup zurückspielen
Ein Backup anzufertigen ist natürlich nur eine Seite der Medaille. Im Falle des Falles muss das Backup auch zurückgespielt werden können.
Vor der Wiederherstellung versetzen wir Nextcloud wie gewohnt in den Maintenance-Mode:
cd /var/www/nextcloud sudo -u www-data php occ maintenance:mode --on
Da wir hier ein komplettes Backup wieder einspielen, sollte der Webserver zunächst ein mal gestoppt werden:
service nginx stop (Falls Apache im Einsatz, dann den Apache stoppen "service apache2 stop")
Vor der Wiederherstellung der Dateien der Cloud werden als erstes die entsprechenden Verzeichnisse gelöscht und neu angelegt. Dies sorgt dafür, dass keine Dateien aus dem Zustand vor dem Backup übrigleiben:
rm -r /var/www/nextcloud/ rm -r /var/nextcloud_data/
mkdir -p /var/www/nextcloud/ mkdir -p /var/nextcloud_data/
Nun gilt es zunächst das Nextcloud-Verzeichnis aus dem Backup wiederherzustellen. Da das Datum als Zeitstempel für das Backup diente, muss bei den folgenden Befehlen immer das korrekte Datum verwendet werden: muss bei den folgenden Befehlen immer das korrekte Datum verwendet werden:
tar -xpzf /mnt/Share/Backups/Nextcloud/NextcloudBackup_FileDir_20170912.tar.gz -C /var/www/nextcloud/
Das gleiche wird mit dem Datenverzeichnis von Nextcloud durchgeführt:
tar -xpzf /mnt/Share/Backups/Nextcloud/NextcloudBackup_DataDir_20170912.tar.gz -C /var/nextcloud_data/
Anschließend werden die Verzeichnis-Berechtigungen noch einmal explizit gesetzt:
chown -R www-data:www-data /var/www/nextcloud chown -R www-data:www-data /var/nextcloud_data
Zum Schluss wird noch die Datenbank wiederhergestellt. Dazu wird zunächst die Datenbank entfernt und neu angelegt (für die Ausführung der Befehle muss das Passwort des Nextcloud-Datenbankusers angegeben werden):
mysql -h localhost -u nextcloud_db_user -p -e "DROP DATABASE nextcloud_db" mysql -h localhost -u nextcloud_db_user -p -e "CREATE DATABASE nextcloud_db"
Das Einspielen des Backups geschieht durch folgenden Befehl:
mysql -h localhost -u nextcloud_db_user -p nextcloud_db < /mnt/Share/Backups/Nextcloud/NextcloudBackup_DB_20170912.sql
Nun wird der Webserver wieder gestartet:
service nginx start oder service apache2 start
Nun wird Nextcloud wieder aus dem Maintenance-Mode geholt.
cd /var/www/nextcloud sudo -u www-data php occ maintenance:mode --off
Zum Schluss muss noch ein Befehl abgesetzt werden, damit Nextcloud-Clients mitbekommen können, dass sich hier etwas durch das Wiederherstellen eines Backups verändert hat:
cd /var/www/nextcloud sudo -u www-data php occ maintenance:data-fingerprint
Nach diesen Schritten wurde ein Backup von Nextcloud wiederhergestellt und es kann wieder mit der Cloud gearbeitet werden.
Backup/Restore mit Bash-Skript (bevorzugt)
Backup einrichten
und dieser in der Folge als Backupziel angeben Das Backupscript verwendet pigz zur Kommprimierung des Backups. Falls noch nicht installiert, dann nachinstallieren.
apt install pigz
Das Backupscript benötigt ein Datensicherungsziel
Das kann ein Sambashare, ein NFS Share oder auch eine lokale Festplatte sein.
Am besten automatisch per Eintrag in /etc/fstab unter /mnt einbinden. (z.B. /mnt/QNAP)
Um zu verhindern, dass beim nicht Vorhandensein des Backupziels (nicht gemountet)
alles in /mnt/QNAP geschrieben und das lokale Dateisystem volläuft wird am besten ein Symlink auf /mnt/QNAP erzeugt
und dieser in der Folge als Backupziel angeben
Backup-Scripte beim Autor runterladen und Backup Konfigurieren
1. Clone the repository: `git clone https://codeberg.org/DecaTec/Nextcloud-Backup-Restore.git` 2. Set permissions: - `chown -R root Nextcloud-Backup-Restore` - `cd Nextcloud-Backup-Restore` - `chmod 700 *.sh` 3. Call the (interactive) script for automated setup (this will create a file `NextcloudBackupRestore.conf` containing the desired con> 4. **Important**: Check this configuration file if everything was set up correctly (see *TODO* in the configuration file comments) 5. Start using the scripts: See sections *Backup* and *Restore* below
Backup ausführen
Kein weiterer Parameter notwendig
./NextcloudBackup.sh
Restore ausführen
Als Parameter das genaue Backup angeben
./NextcloudRestore.sh 20170912_073953
Automatisches Backup per Cronjob
crontab -e 0 2 * * * /path/to/scripts/Nextcloud-Backup-Restore/NextcloudBackup.sh > /path/to/logs/Nextcloud-Backup-$(date +\%Y\%m\%d\%H\%M\%S).log 2>&1