Nextcloud 13 backup and restore

Backup Nextcloud

Ensure to have regulary backups from _0 (Sunday) to _6 (Saturday)  of your Nextcloud, including at least:
– the webfolder: /var/www/nextcloud
– the datafolder: /var/nc_data
– and the database: nextcloud.

Please substitute ubuntuusername and the database password nextcloud with yours. Switch into sudo mode:

sudo -s

1. Turn maintenance mode on:

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on

2. Backup the webfolder:

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

3. Backup the datafolder:

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

4. Backup the database:

mysqldump --single-transaction -h localhost -unextcloud -pnextcloud nextcloud > /home/ubuntuusername/ncdb_`date +"%w"`.sql

5. Turn maintenance mode off:

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off


6. A simple backup example (

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
echo "START: $(date)"
if [ -d "$FOLDER" ];
echo "Copying $FOLDER..."
rsync -AaRx --delete $FOLDER $BACKUP_STORE
echo "Skipping $FOLDER (since it does not exist)"
cp /etc/fstab $BACKUP_STORE/etc/
mysqldump --single-transaction -h localhost -unextcloud -pnextcloud nextcloud > $BACKUP_STORE/ncdb_`date +"%w"`.sql
mysql -e "SELECT table_schema 'DB',round(sum(data_length+index_length)/1024/1024,4) 'Size (MB)' from information_schema.tables group by table_schema;"
mkdir -p $(dirname $ARCHIVE_FILE)
tar -cpzf $ARCHIVE_FILE .
echo "Serverbackup size: $(stat --printf='%s' $ARCHIVE_FILE | numfmt --to=iec)"
rm $BACKUP_STORE/*.sql
tar -cpzf $ARCHIVE_STORE/ncdata_`date +"%w"`.tar.gz -C /var/nc_data .
echo "Databackup size: $(stat --printf='%s' $ARCHIVE_STORE/ncdata_`date +"%w"`.tar.gz | numfmt --to=iec)"
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
echo "END: $(date)"
exit 0

Restore Nextcloud

A restore of your Nextcloud even consists of
– the webfolder: /var/www/nextcloud
– the datafolder: /var/nc_data
– the database: nextcloud.

We demonstrate a restore exemplarily from a Monday backup (_1) what have to be ammended properly. Switch into sudo mode:

sudo -s

1. Turn maintenance mode on:

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on

2. Stop services:

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

3. Delete the old directories:

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

4. Create the directories new again:

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

5. Apply the permissions:

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

6. Restore the database:

– Delete the old database

mysql -h localhost -uroot -pnextcloud -e "DROP DATABASE nextcloud"

– Create an empty one

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

– Grant access

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

– Restore the database

mysql -h localhost -unextcloud -pnextcloud nextcloud < /home/ubuntuusername/ncdb_1.sql

7. Restart services:

/usr/sbin/service php7.2-fpm start
/usr/sbin/service nginx start

8. Fingerprint:

After restoring a backup of your data directory or the database, you should always call maintenance:data-fingerprint once. This changes the ETag for all files in the communication with sync clients, allowing them to realize a file was modified.

sudo -u www-data php /var/www/nextcloud/occ maintenance:data-fingerprint

9. Turn maintenance mode off:

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off


Carsten Rieger

7 Responses

  1. tito says:

    Hi, nice tutorial
    But when I tried to make a DATABASE backup.. shows this error:

    mysqldump: Got error: 1045: “Access denied for user ‘nextcloud’@’localhost’ (using password: YES)” when trying to connect

    Do you know what is the problem? Or how can I solve it?

    • How did you try to perform the db-backup? Please call mysql -unextcloud -p -hlocalhost. Are you able to connect to your databse server?

    • tito says:

      no matter, I resolved. Thank anyway.
      There some way the backup and crontab works together?. what would be the script? for example: every week. Nice tutorial and very profesional. thanks.

  2. Sebastien says:

    can you tell me what is the difference between backup_store and archive_store please?

    • Hi Sebastien,
      “BACKUP_STORE” is the working directory for rsync to sync all folders configured “FOLDERS_TO_BACKUP”
      “ARCHIVE_STORE” is the directory where the backups will be stored to: “/home/ubuntuusername/backup_dir”
      It is just an example, feel free to consolidate or simplify the backup script to your need. Cheers, Carsten

  3. Alfred says:

    Hi! Is it possible to use this manual to migrate an ARM based instance of Nextcloud /Odroid C2/ to a new x86 server? Thanks!

Leave a Reply

Your email address will not be published. Required fields are marked *