# Backup

To backup a Nextcloud installation there are five main things you need to retain:

1.  The config folder
2.  The custom apps folder (only if you have custom apps installed)
3.  The data folder
4.  The theme folder
5.  The database

## Maintenance mode

`maintenance:mode` locks the sessions of logged-in users and prevents new logins in order to prevent inconsistencies of your data. You must run `occ` as the HTTP user, like this example on Ubuntu Linux:

    $ sudo -E -u www-data php occ maintenance:mode --on

You may also put your server into this mode by editing `config/config.php`. Change `"maintenance" => false` to `"maintenance" => true`:

    <?php

     "maintenance" => true,

Don't forget to change it back to `false` when you are finished.

## Backup folders

Copy your config, data, and theme directories to a location outside your Nextcloud environment. Alternatively, copy your entire Nextcloud installation directory (including the data directory). You could use this command:

    rsync -Aavx nextcloud/ nextcloud-dirbkp_`date +"%Y%m%d"`/

## Backup database

> **注意**
>
> Before restoring a backup see [Restoring backup](/link/1063)

### MariaDB

MariaDB is the recommended database engine. To backup MariaDB using [mariadb-dump](https://mariadb.com/docs/server/clients-and-utilities/backup-restore-and-import-clients/mariadb-dump):

    mariadb-dump --single-transaction -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak

If you have enabled MariaDB 4-byte support ([Enabling MySQL 4-byte support](/link/912), needed for emoji), add `--default-character-set=utf8mb4`:

    mariadb-dump --single-transaction --default-character-set=utf8mb4 -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak

### MySQL

To backup MySQL:

    mysqldump --single-transaction -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak

If you have enabled MySQL 4-byte support ([Enabling MySQL 4-byte support](/link/912), needed for emoji), add `--default-character-set=utf8mb4`:

    mysqldump --single-transaction --default-character-set=utf8mb4 -h [server] -u [username] -p[password] [db_name] > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak

### SQLite

    sqlite3 data/owncloud.db .dump > nextcloud-sqlbkp_`date +"%Y%m%d"`.bak

### PostgreSQL

    PGPASSWORD="password" pg_dump [db_name] -h [server] -U [username] -f nextcloud-sqlbkp_`date +"%Y%m%d"`.bak
