备份和恢复

概述

一般来说,Seafile 备份分为两部分内容:

如果你根据我们的手册来安装 Seafile 服务器,你应该有如下目录结构:

/opt/seafile
  --seafile-server-9.x.x # Seafile 安装包解压缩后目录
  --seafile-data   # Seafile 配置文件和数据(如果你选择默认方式)
  --seahub-data    # Seahub 数据
  --conf           # 包含配置文件

你所有的资料库数据都存储在 /opt/seafile 目录。

对于 MySQL, 数据库由管理员来创建,所以不同的人部署,可能会有不同的文件名。大体而言,有如下三个数据库会被创建:

备份步骤

备份需要如下两步:

  1. 备份数据库;

  2. 备份存放 Seafile 数据的目录;

备份顺序:数据库优先或数据目录优先

从某种意义上说,第二个方法更好,因为它避免了资料库损坏。与其他备份解决方案一样,一些新数据可能会在恢复过程中丢失。始终有一个备份窗口。

Seafile 二进制包安装方式下的备份和恢复

目录结构

我们假设你的 Seafile 数据位于 /opt/seafile 目录下,并且你想将其备份到 /backup 目录(/backup 目录可以是 NFS(网络文件系统),可以是另一台机器的 Windows 共享,或者是外部磁盘)。请在 /backup 目录下创建如下目录结构:

/backup
---- databases/  包含数据库备份
---- data/  包含 Seafile 数据备份

备份数据

备份数据库

我们建议你每次将数据库备份到另一个单独文件,并且不要覆盖最近一周来备份过的旧数据库文件。

MySQL

假设你的数据库名分别为 ccnet_db, seafile_dbseahub_dbmysqldump 会自动锁住表,所以在你备份 MySql 数据库的时候,不需要停掉 Seafile 服务器。通常因为数据库表非常小,所以执行以下命令备份不会花太长时间。

mysqldump -h [mysqlhost] -u[username] -p[password] --opt ccnet_db > /backup/databases/ccnet_db.sql.`date +"%Y-%m-%d-%H-%M-%S"`
mysqldump -h [mysqlhost] -u[username] -p[password] --opt seafile_db > /backup/databases/seafile_db.sql.`date +"%Y-%m-%d-%H-%M-%S"`
mysqldump -h [mysqlhost] -u[username] -p[password] --opt seahub_db > /backup/databases/seahub_db.sql.`date +"%Y-%m-%d-%H-%M-%S"`

备份 Seafile 资料库数据

由于所有的数据文件都存储在 /opt/seafile 目录, 备份整个目录即可。你可以直接拷贝整个目录到备份目录,或者你也可以用 rsync 做增量备份。

直接拷贝整个数据目录:

cp -R /opt/seafile /backup/data/seafile-`date +"%Y-%m-%d-%H-%M-%S"`

这样每次都会产生一个新的备份文件夹。完成后可以删掉旧的备份。

如果你有很多数据,拷贝整个数据目录会花很多时间,这时你可以用 rsync 做增量备份。

rsync -az /opt/seafile /backup/data

这个命令将数据备份到 /backup/data/seafile 下。

恢复数据

恢复 Seafile 资料库数据

如果你当前的 Seafile 服务器已经坏掉,需要恢复到另一台机器:

  1. 假设在新机器中,Seafile 也被部署在了 /opt/seafile 目录中,拷贝 /backup/data/seafile 到新机器中即可。

  2. 恢复数据库。

恢复数据库

你可以按如下步骤来进行恢复。

mysql -u[username] -p[password] ccnet_db < ccnet_db.sql.2013-10-19-16-00-05
mysql -u[username] -p[password] seafile_db < seafile_db.sql.2013-10-19-16-00-20
mysql -u[username] -p[password] seahub_db < seahub_db.sql.2013-10-19-16-01-05

Seafile Docker 安装方式下的备份和恢复

目录结构

我们假设您的 seafile 数据卷路径是 /opt/seafile-data,并且您想将备份数据存放到 /backup 目录下。

您可以创建一个类似以下 /opt/seafile-backup 的目录结构:

/backup
---- databases/  用来存放 MySQL 容器的备份数据
---- data/  用来存放 Seafile 容器的备份数据

要备份的数据文件:

/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

备份数据

步骤:

  1. 备份 MySQL 数据库数据;

  2. 备份 Seafile 数据目录;

备份数据库

建议每次将数据库备份到一个单独的文件中。至少在一周内不要覆盖旧的数据库备份。

cd /backup/databases
docker exec -it seafile-mysql mysqldump -u[username] -p[password] --opt ccnet_db > ccnet_db.sql
docker exec -it seafile-mysql mysqldump -u[username] -p[password] --opt seafile_db > seafile_db.sql
docker exec -it seafile-mysql mysqldump -u[username] -p[password] --opt seahub_db > seahub_db.sql

注释:-p 后面是 mysql 的 root 用户登录密码,不要有空格

备份 Seafile 资料库数据

直接复制整个数据目录

cp -R /opt/seafile-data/seafile /backup/data/

或者使用 rsync 执行增量备份

rsync -az /opt/seafile-data/seafile /backup/data/

恢复数据

恢复数据库

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 -u[username] -p[password] ccnet_db < /tmp/ccnet_db.sql"
docker exec -it seafile-mysql /bin/sh -c "mysql -u[username] -p[password] seafile_db < /tmp/seafile_db.sql" 
docker exec -it seafile-mysql /bin/sh -c "mysql -u[username] -p[password] seahub_db < /tmp/seahub_db.sql"

恢复 seafile 数据

cp -R /backup/data/* /opt/seafile-data/seafile/

Last modified by Daniel Pan, 2024-03-30

概述
备份步骤
备份顺序:数据库优先或数据目录优先
Seafile 二进制包安装方式下的备份和恢复
目录结构
备份数据
恢复数据
Seafile Docker 安装方式下的备份和恢复
目录结构
备份数据
恢复数据