Nextcloud ist ein optimaler Speicherort für eure Daten oder Termine. Aber auch hier gilt, dass man IMMER Backups erstellen soll. Hier zeige ich euch, wie ihr dies per Hand oder automatisch per Skript realisieren könnt.
Update
07.04.2020 | Skript erweitert um alte Backups nach x Tagen zu löschen. |
02.10.2018 | Erstellung des Artikels |
Bei Nextcloud sollten folgende Verzeichnisse gesichert werden:
- das Installationsverzeichnis (z. B. /var/www/html/nextcloud)
- das Datenverzeichnis (z. B. /opt/nextcloud)
- die Datenbank von Nextcloud
Bei meiner Anleitung beziehe ich mich auf die offizielle Anleitung von Nextcloud, die ihr hier finden könnt. In dieser Anleitung werden jedoch Befehle wie “sudo” genutzt, die unter Debian standardmäßig so nicht möglich sind. Daher schreibe ich immer noch die Befehle dazu, die ihr unter Debian eingeben müsst.
Backup erstellen
1. Wartungsmodus aktivieren
Zuerst solltet ihr in Nextcloud den Wartungsmodus aktivieren. Dieser sorgt dafür, dass die Daten konsistent sind, d.h. dass nichts mehr verändert werden kann. Die Verzeichnisse zu eurer Nextcloud-Installation müssen hier angepasst werden !
Linux:
sudo -u www-data /var/www/html/nextcloud/php occ maintenance:mode --on
Debian:
su -s /bin/bash www-data -c "php /var/www/html/nextcloud/occ maintenance:mode --on"
Nun sollte in eurer Konsole folgende Meldung erscheinen:
Maintenance mode enabled
2. Backup erstellen
2.1 Backup des Installationsverzeichnisses
In diesem Schritt erstellt ihr ein Backup eures Nextcloud-Installationsverzeichnisses. Diesen Code müsst ihr ebenfalls wieder anpassen.
tar -cpzf /opt/Sicherungen/Backup_Nextcloud-Install_`date +"%Y%m%d"`.tar.gz -C /var/www/html/nextcloud . Erklärung: /opt/Sicherungen/ --> Speicherort des Backups Backup_Nextcloud-Install_`date +"%Y%m%d"`.tar.gz --> Name des Backups. Hier wird das aktuelle Datum verwendet. /var/www/html/nextcloud --> gibt den Pfad eurer Nextcloud Daten an. Diese werden gesichert.
2.2 Backup des Nextcloud-Datenverzeichnisses
Nun erstellen wir ein Backup von dem Verzeichnis, in welchem alle eure persönlichen Daten gespeichert werden. Auch hier gilt, dass ihr den Code wieder auf eure Bedürfnisse anpassen müsst.
tar -cpzf /opt/Sicherungen/Backup_Nextcloud-Daten_`date +"%Y%m%d"`.tar.gz -C /var/www/html/nextcloud_data .
2.3 Datenbank Backup
Im letzten Schritt müsst ihr nur noch ein Backup eurer Datenbank anlegen. In dieser Anleitung geht nur auf die Datenbanken MySQL/MariaDB ein.
ACHTUNG !!
KEIN LEERZEICHEN ZWISCHEN -P UND DEM PASSWORT
mysqldump --single-transaction -h localhost -u nextadmin -pgeheimesPasswort nextcloud > /opt/Sicherungen/Nextcloud-DB_`date +"%Y%m%d"`.sql Erklärungen: -h localhost --> gibt den Speicherort der Datenbank an. Localhost heißt, dass es sich auf dem selben Server befindet. -u nextadmin --> gibt den Nextcloud SQL Benutzer an -pgeheimesPasswort --> gibt das Passwort für den Benutzer nextadmin an. HIER DARF KEIN LEERZEICHEN SEIN !!! nextcloud --> Name der Datenbank
2.4 Wartungsmodus abschalten
Nachdem ihr alles gesichert habt, könnt ihr den Wartungsmodus wieder abschalten. Dazu gebt ihr folgendes ein:
Linux:
sudo -u www-data /var/www/html/nextcloud/php occ maintenance:mode --off
Debian:
su -s /bin/bash www-data -c "php /var/www/html/nextcloud/occ maintenance:mode --off"
Nun sollte in eurer Konsole folgendes stehen:
Nextcloud is in maintenance mode - no apps have been loaded
Maintenance mode disabled
Backup wiederherstellen auf NEUEM Server
Diese Anleitung bezieht sich auf einen Server, auf dem noch NIE Nextcloud installiert wurde.
0. Server vorbereiten
Unter diesen Punkt zählt, dass Ihr alle benötigten Programme wie Webserver / Datenbank installiert habt. Ebenfalls müsst ihr zum Beispiel für nginx eine Konfiguration für Nextcloud hinterlegen. Dazu habe ich hier eine Anleitung geschrieben.
1. Verzeichnisse erstellen
Zuerst erstellen wir die Verzeichnisse und legen die Rechte fest, die wir später für Nextcloud benötigen.
Verzeichnisse erstellen: mkdir -p /var/www/html/nextcloud/ --> Installationsverzeichnis mkdir -p /opt/nextcloud/ --> Datenverzeichnis Rechte vergeben: chown -R www-data:www-data /var/www/html/nextcloud chown -R www-data:www-data /opt/nextcloud/
2. Dateien wiederherstellen
Nun beginnen wir damit die Daten wiederherzustellen. Hier muss zwischen den Daten und den Installationsdaten unterschieden werden. Hier müsst ihr auch wieder die entsprechenden Werte anpassen.
tar -xpzf /opt/Sicherungen/Backup_Nextcloud-Install_xxxxxxx.tar.gz -C /var/www/html/nextcloud/
tar -xpzf /opt/Sicherungen/Backup_Nextcloud-Daten_xxxxxxx.tar.gz -C /opt/nextcloud/
3. Datenbank wiederherstellen
Nachdem alle Daten wieder vorhanden sind, müsst ihr nur noch die Datenbank wiederherstellen. Dazu müsst ihr jedoch erst einen Benutzer für Nextcloud SQL anlegen und diesem Rechte vergeben.
3.1 SQL Benutzer anlegen
Administrator: nextadmin
Datenbankname: nextcloud
Passwort: geheimesPasswort
mysql -u root -p create database nextcloud; create user nextadmin@localhost identified by 'geheimesPasswort'; grant all privileges on nextcloud.* to nextadmin@localhost identified by 'geheimesPasswort'; flush privileges; exit
3.2 SQL Backup wiederherstellen
Hier müsst ihr den Befehl entsprechend eurer Daten anpassen:
mysql -h localhost -unextadmin -pgeheimesPasswort nextcloud < /opt/Sicherungen/Nextcloud-DB_xxxx.sql
3.3 Fingerprint updaten
Diese Schritt ist notwendig, dass eure Clients die Datenbank wieder korrekt erkennen.
Nachdem ihr den obigen Befehl erfolgreich ausprobiert habt, legen wir jetzt einen Cronjob an, damit dieser automatisch ausgeführt wird.
Das geht mit
crontab -e
Wenn ihr noch keinen Crontab angelegt habt, dann sollte folgende Meldung erscheinen. Hier drückt ihr einfach “1”.
Nun solltet ihr folgendes sehen.
Mein Backup Script liegt unter “/home/user/backup.sh”.
Fügt am Ende der Datei folgende Zeile ein:
0 4 * * * /home/Benutzername/nextcloud-backup.sh >> /home/Benutzername/Log.txt Erklärung: >> /home/Benutzername/Log.txt bewirkt, dass die Ausgaben des Skripts in die Datei Log.txt geschrieben werden
Erklärung der obigen Zeile:
1. Stelle: Minute -> 0 2. Stelle: Stunde -> 4 3. Stelle: Tag des Monats -> * 4. Stelle: Monat -> * 5. Stelle: Wochentag -> *
Das Skript wird also jeden Tag nachts um 4 Uhr gestartet.
Hallo
erhalte eine Fehlermeldung bei ausfährung des scripts.
Aktivierung Wartungsmodus:
Fehler: Too many arguments , expected arguments „command“.
maintenance:mode [ –on ] [ –off ]
Hallo
erhalte eine Fehlermeldung bei ausfährung des scripts.
( Fehler: Too many arguments , expected arguments “command”. )
Vielen Dank für die Anleitung.
Aber noch folgende anmerkung zu deinem Design
es hat sich in letzter zeit eingebürgert texte in grau anzuzeigen (ist meist schlecht zu lesen, also bitte in normal schwarz )
aber wenn mann Code-Zeilen anzeigen lässt sollte man diese farblich hervorheben.
Herzlichen Dank dafür.
Ich bin erst darüber gestolpert, das die — hier als ein längeres – angezeigt werden.
Und die Fehlermeldung war erst mal nicht so hilfreich 😉
Erstellung des Backups eurer Nextcloud Datenbank
mysqldump: Error: ‘Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation ‘=” when trying to dump tablespaces
mysqldump: Got error: 1300: “Invalid utf8mb4 character string: ‘\x96′” when selecting the database
Tausend Dank, sehr nützlich. Nur eine Kleinigkeit. Anfängern wie mich sollte man auch sagen, dass man beim Sichern der Datenbank das Passwort escapen muss, wenn es Sonderzeichen enthält, sonst funktionierts nicht, also -p’passwort’, siehe https://superuser.com/questions/123928/escaping-a-password-using-mysqldump-console
Hallo nochmal,
also dieses Root Problem, welches ich gestern hier gepostet habe, hat sich erledigt. Cron übernimmt den Vorgang ja und hat logischerweise root Rechte 😉 Da habe ich wohl nicht ganz zu Ende gedacht.
…
Jetzt wird ja jeden Tag immer ein neues Backup erstellt, in einem neuen Ordner. Das ist ja auch gut so. Aber ist es irgendwie möglich, mithilfe dieses Scripts, ältere Backups automatisch zu löschen?
Hallo Christian,
erst einmal danke für die schöne Anleitung, die hat mir sehr geholfen. Aber eine Sache bezüglich des automatisierten Scripts: man benötigt doch root (vor allem für das Backup der Database), aber ich steh ja jetzt nicht nachts um 04 Uhr auf, um das Passwort einzugeben…Gibt es dafür eine Lösung?
Liebe Grüße,
Matthias