Nextcloud 백업 및 복원

Nextcloud Sicher- & Wiederherstellung
von Carsten Rieger|Aktualisiert 25. April 2021
Nextcloud Sicherung und Wiederherstellung

EIn neuerer Guide ist verfügbar: Nextcloud Backup (Borg) mit De-Duplizierung

Mit dem skizzierten Vorgehen wird der Nextcloud Server regelmäßig gesichert und rotiert. Die Sicherungen enthalten u.a.
– das Web – und Datenverzeichnis: /var/www/nextcloud und /var/nc_data
– sowie die Nextcloud Datenbank.

Ersetzen Sie im weiteren Verlauf bitte den osusername und die Datenbank bzw . das Datenbankppasswort nextcloud mit Ihren Werten.

Beginnen wir und wechseln dazu in den sudo Mode:

sudo -s

1. Nextcloud Wartungsmodus aktivieren:

sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:mode –on

2. Sicherung des Webverzeichnisses:

tar -cpzf /home/osusername/ncserver_`date +”%w”`.tar.gz -C /var/www/nextcloud .

3. Sicherung des Datenverezeichnisses:

tar -cpzf /home/osusername/ncdata_`date +”%w”`.tar.gz -C /var/nc_data .

4. Sicherung der Datenbank:

mysqldump –single-transaction –routines -h localhost -unextcloud -pnextcloud nextcloud > /home/osusername/ncdb_`date +”%w”`.sql

5. Nextcloud Wartungsmodus deaktivieren:

sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:mode –off

Sicherung erstellt.
Wiederherstellung der zuvor erstellten Nextcloud Sicherung

Die Sicherung besteht u.a. aus
– dem Webverzeichnis: /var/www/nextcloud
– dem Datenverzeichnis: /var/nc_data/appdata_
– der Datenbank: nextcloud.

Wir demonstrieren die exemplarische Herstellung einer Montags-Sicherung (_1). Wechseln Sie dafür zuerst in den sudo Mode:

sudo -s

1. Nextcloud Wartungsmodus aktivieren:

sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:mode –on

2. Stoppen aller relevanten Services:

/usr/sbin/service nginx stop
/usr/sbin/service php7.4-fpm stop

3. Löschen der alten Verzeichnisse:

rm -r /var/www/nextcloud/
rm -r /var/nc_data/

4. Anlegen der Verzeichnisse und Entpacken der Sicherung:

mkdir -p /var/www/nextcloud/
mkdir -p /var/nc_data/
tar -xpzf /home/osusername/ncserver_1.tar.gz -C /var/www/nextcloud/
tar -xpzf /home/osusername/ncdata_1.tar.gz -C /var/nc_data/

5. Berechtigungen setzen:

chown -R www-data:www-data /var/nc_data /var/www

6. Nextcloud Datenbank wiederherstellen:
– Löschen der alten Datenbank

mysql -h localhost -uroot -pnextcloud -e “DROP DATABASE nextcloud”

– Anlegen einer leeren Datenbank

mysql -h localhost -uroot -pnextcloud -e “CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci”

– Berechtigungen setzen

mysql -h localhost -uroot -pnextcloud -e “GRANT ALL PRIVILEGES on nextcloud.* to nextcloud@localhost”

– Wiederherstellen der Datenbank

mysql -h localhost -unextcloud -pnextcloud nextcloud < /home/osusername/ncdb_1.sql 7. Neustart der relevanten Services: /usr/sbin/service php7.4-fpm start /usr/sbin/service nginx start 8. Nextcloud fingerprint setzen: Nach einem Daten- oder Datenbankrestore sollte immer occ maintenance:data-fingerprint ausgeführt werden. Dieser Befehl passt den ETag aller Dateien an und teilt den Sync-Clients mit, das Dateien verändert wurden. sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:data-fingerprint 9. Nextcloud Wartungsmodus deaktivieren: sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:mode –off Done. Nachfolgen stelle ich Ihnen ein exemplarisches Backupscript zur Verfügung, das nur noch hinsichtlich der Verzeichnisse und Datenbankparameter angepasst werden muss: !/bin/bash #enbale Maintenance Mode to prevent users from working with Nextcloud sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:mode –on #create directory first: mkdir /backup -p BACKUP_STORE=/backup #create directory first: mkdir /backup-repository -p ARCHIVE_STORE=/backup-repository #declare dateformat and numbering of backups CURRENT_TIME_FORMAT=”%w” #print start date/time echo “START: $(date)” #list of folders to be backed up, feel free to add/remove directories FOLDERS_TO_BACKUP=( “/root/” “/etc/fail2ban/” “/etc/letsencrypt/” “/etc/mysql/” “/etc/nginx/” “/etc/php/” “/etc/ssh/” “/etc/pam.d/” “/etc/ssl/” “/var/www/” “/var/nc_data/” “/nc_data/rainloop-storage/” ) #declare the backup filename ARCHIVE_FILE=”$ARCHIVE_STORE/nc_backup_$(date +$CURRENT_TIME_FORMAT).tar.gz” #change directory cd $BACKUP_STORE #start rsync to back up the folders for FOLDER in ${FOLDERS_TO_BACKUP[@]} do if [ -d “$FOLDER” ]; then echo “Copying $FOLDER…” rsync -AaRx –delete $FOLDER $BACKUP_STORE else echo “Skipping $FOLDER (does not exist!)” fi done #copy the fstab [ -f /etc/fstab ] && cp /etc/fstab $BACKUP_STORE/etc/ #copy the mail configuration [ -f /etc/msmtprc ] && cp /etc/msmtprc $BACKUP_STORE/etc/ #create a database back up mysqldump –single-transaction -h localhost -unextcloud -pnextcloud nextcloud > $BACKUP_STORE/ncdb_date +”%w”.sql
#print the database backup size
mysql -hlocalhost -unextcloud -pnextcloud -e “SELECT table_schema ‘DB’,round(sum(data_length+index_length)/1024/1024,1) ‘Size (MB)’ from information_schema.tables WHERE table_schema = ‘nextcloud’;”
#create the directories
mkdir -p $(dirname $ARCHIVE_FILE)
#compress all data
tar -cpzf $ARCHIVE_FILE .
#print back up size
echo “nc_backup size: $(stat –printf=’%s’ $ARCHIVE_FILE | numfmt –to=iec)”
#stop all services
/usr/sbin/service nginx stop
/usr/sbin/service mysql stop
/usr/sbin/service redis-server stop
/usr/sbin/service php7.4-fpm stop
#remove copied files
[ -f $BACKUP_STORE/ncdb_date +”%w”.sql ] && rm -f $BACKUP_STORE/ncdb_date +”%w”.sql
[ -f /etc/msmtprc ] && rm -f $BACKUP_STORE/etc/msmtprc
[ -f /etc/fstab ] && rm -f $BACKUP_STORE/etc/fstab
#restart all services
/usr/sbin/service nginx stop
/usr/sbin/service mysql restart
/usr/sbin/service redis-server restart
#enable if Collabora and/or OnlyOffice are used
/usr/bin/docker restart COLLABORAOFFICE
/usr/sbin/service php7.4-fpm restart
/usr/sbin/service nginx restart
#disable maintanance mode
sudo -u www-data php7.4 /var/www/nextcloud/occ maintenance:mode –off
#Nextcloud optimizations
#Ubuntu:
/usr/bin/redis-cli -s /var/run/redis/redis-server.sock <<EOF
#Debian: /usr/bin/redis-cli -s /var/run/redis/redis.sock <<EOF
FLUSHALL
quit
EOF
sudo -u www-data php7.4 /var/www/nextcloud/occ files:scan –all
sudo -u www-data php7.4 /var/www/nextcloud/occ files:scan-app-data
#check for Nextcloud updates
echo “Nextcloud apps are checked for updates…”
sudo -u www-data php7.4 /var/www/nextcloud/occ app:update –all
#print end date/time
echo “END: $(date)”
exit 0

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다