Merge pull request #266 from haiwen/Backup-and-Recovery-for-Seafile-Docker

Backup and recovery for Seafile Docker
This commit is contained in:
欢乐马 2024-03-25 17:22:14 +08:00 committed by GitHub
commit 54c8e13bb2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 78 additions and 150 deletions

View File

@ -236,81 +236,7 @@ docker compose up -d
## Backup and recovery
### Structure
We assume your seafile volumns path is in `/opt/seafile-data`. And you want to backup to `/opt/seafile-backup` directory.
You can create a layout similar to the following in /opt/seafile-backup directory:
```
/opt/seafile-backup
---- databases/ MySQL contains database backup files
---- data/ Seafile contains backups of the data directory
```
The data files to be backed up:
```
/opt/seafile-data/seafile/conf # configuration files
/opt/seafile-data/seafile/seafile-data # data of seafile
/opt/seafile-data/seafile/seahub-data # data of seahub
```
### Backup
Steps:
1. Backup the databases;
2. Backup the seafile data directory;
Backup Order: Database First or Data Directory First
#### backing up Database:
```bash
# It's recommended to backup the database to a separate file each time. Don't overwrite older database backups for at least a week.
cd /opt/seafile-backup/databases
docker exec -it seafile-mysql mysqldump -uroot --opt ccnet_db > ccnet_db.sql
docker exec -it seafile-mysql mysqldump -uroot --opt seafile_db > seafile_db.sql
docker exec -it seafile-mysql mysqldump -uroot --opt seahub_db > seahub_db.sql
```
#### Backing up Seafile library data:
##### To directly copy the whole data directory
```bash
cp -R /opt/seafile-data/seafile /opt/seafile-backup/data/
cd /opt/seafile-backup/data && rm -rf ccnet
```
##### Use rsync to do incremental backup
```bash
rsync -az /opt/seafile-data/seafile /opt/seafile-backup/data/
cd /opt/seafile-backup/data && rm -rf ccnet
```
### Recovery
#### Restore the databases:
```bash
docker cp /opt/seafile-backup/databases/ccnet_db.sql seafile-mysql:/tmp/ccnet_db.sql
docker cp /opt/seafile-backup/databases/seafile_db.sql seafile-mysql:/tmp/seafile_db.sql
docker cp /opt/seafile-backup/databases/seahub_db.sql seafile-mysql:/tmp/seahub_db.sql
docker exec -it seafile-mysql /bin/sh -c "mysql -uroot ccnet_db < /tmp/ccnet_db.sql"
docker exec -it seafile-mysql /bin/sh -c "mysql -uroot seafile_db < /tmp/seafile_db.sql"
docker exec -it seafile-mysql /bin/sh -c "mysql -uroot seahub_db < /tmp/seahub_db.sql"
```
### Restore the seafile data:
```bash
cp -R /opt/seafile-backup/data/* /opt/seafile-data/seafile/
```
Follow the instructions in [Backup and recovery for Seafile Docker](../maintain/backup_recovery.md)
## Garbage collection

View File

@ -312,81 +312,7 @@ docker compose up -d
## Backup and Recovery
### Structure
We assume your seafile volumns path is in `/opt/seafile-data`. And you want to backup to `/opt/seafile-backup` directory.
You can create a layout similar to the following in /opt/seafile-backup directory:
```
/opt/seafile-backup
---- databases/ MySQL contains database backup files
---- data/ Seafile contains backups of the data directory
```
The data files to be backed up:
```
/opt/seafile-data/seafile/conf # configuration files
/opt/seafile-data/seafile/seafile-data # data of seafile
/opt/seafile-data/seafile/seahub-data # data of seahub
```
### Backup
Steps:
1. Backup the databases;
2. Backup the seafile data directory;
Backup Order: Database First or Data Directory First
#### Backing up Database:
```
# It's recommended to backup the database to a separate file each time. Don't overwrite older database backups for at least a week.
cd /opt/seafile-backup/databases
docker exec -it seafile-mysql mysqldump -uroot --opt ccnet_db > ccnet_db.sql
docker exec -it seafile-mysql mysqldump -uroot --opt seafile_db > seafile_db.sql
docker exec -it seafile-mysql mysqldump -uroot --opt seahub_db > seahub_db.sql
```
#### Backing up Seafile Library Data
##### Copy the whole data directory directly
```
cp -R /opt/seafile-data/seafile /opt/seafile-backup/data/
cd /opt/seafile-backup/data && rm -rf ccnet
```
##### Use rsync to do incremental backup
```bash
rsync -az /opt/seafile-data/seafile /opt/seafile-backup/data/
cd /opt/seafile-backup/data && rm -rf ccnet
```
### Recovery
#### Restoring the Databases
```
docker cp /opt/seafile-backup/databases/ccnet_db.sql seafile-mysql:/tmp/ccnet_db.sql
docker cp /opt/seafile-backup/databases/seafile_db.sql seafile-mysql:/tmp/seafile_db.sql
docker cp /opt/seafile-backup/databases/seahub_db.sql seafile-mysql:/tmp/seahub_db.sql
docker exec -it seafile-mysql /bin/sh -c "mysql -uroot ccnet_db < /tmp/ccnet_db.sql"
docker exec -it seafile-mysql /bin/sh -c "mysql -uroot seafile_db < /tmp/seafile_db.sql"
docker exec -it seafile-mysql /bin/sh -c "mysql -uroot seahub_db < /tmp/seahub_db.sql"
```
#### Restoring the Seafile Library data
```
cp -R /opt/seafile-backup/data/* /opt/seafile-data/seafile/
```
Follow the instructions in [Backup and recovery for Seafile Docker](../../maintain/backup_recovery.md)
## Garbage Collection

View File

@ -147,4 +147,80 @@ sqlite3 seahub.db < seahub.db.bak.xxxx
```
## Backup and recovery for Seafile Docker
### Structure
We assume your seafile volumns path is in `/opt/seafile-data`. And you want to backup to `/opt/seafile-backup` directory.
You can create a layout similar to the following in /opt/seafile-backup directory:
```
/opt/seafile-backup
---- databases/ MySQL contains database backup files
---- data/ Seafile contains backups of the data directory
```
The data files to be backed up:
```
/opt/seafile-data/seafile/conf # configuration files
/opt/seafile-data/seafile/seafile-data # data of seafile
/opt/seafile-data/seafile/seahub-data # data of seahub
```
### Backup
Steps:
1. Backup the databases;
2. Backup the seafile data directory;
Backup Order: Database First or Data Directory First
#### Backing up Database
```bash
# It's recommended to backup the database to a separate file each time. Don't overwrite older database backups for at least a week.
cd /opt/seafile-backup/databases
docker exec -it seafile-mysql mysqldump -uroot --opt ccnet_db > ccnet_db.sql
docker exec -it seafile-mysql mysqldump -uroot --opt seafile_db > seafile_db.sql
docker exec -it seafile-mysql mysqldump -uroot --opt seahub_db > seahub_db.sql
```
#### Backing up Seafile library data
##### To directly copy the whole data directory
```bash
cp -R /opt/seafile-data/seafile /opt/seafile-backup/data/
cd /opt/seafile-backup/data && rm -rf ccnet
```
##### Use rsync to do incremental backup
```bash
rsync -az /opt/seafile-data/seafile /opt/seafile-backup/data/
cd /opt/seafile-backup/data && rm -rf ccnet
```
### Recovery
#### Restore the databases
```bash
docker cp /opt/seafile-backup/databases/ccnet_db.sql seafile-mysql:/tmp/ccnet_db.sql
docker cp /opt/seafile-backup/databases/seafile_db.sql seafile-mysql:/tmp/seafile_db.sql
docker cp /opt/seafile-backup/databases/seahub_db.sql seafile-mysql:/tmp/seahub_db.sql
docker exec -it seafile-mysql /bin/sh -c "mysql -uroot ccnet_db < /tmp/ccnet_db.sql"
docker exec -it seafile-mysql /bin/sh -c "mysql -uroot seafile_db < /tmp/seafile_db.sql"
docker exec -it seafile-mysql /bin/sh -c "mysql -uroot seahub_db < /tmp/seahub_db.sql"
```
### Restore the seafile data
```bash
cp -R /opt/seafile-backup/data/* /opt/seafile-data/seafile/
```