最近把手上的VortexNode 5刀独服换成了高配版(4G/640G),因此需要把上面最重要的数据——Seafile进行转移,按照官方手册完成了备份和恢复以及升级,在这里记录一下,以备将来使用。

首先在这里再次重申,这里转载的官方教程,仅选取了SQLite版Seafile的部分,完整的备份与恢复教程(包括MySQL版)请至官方页面查看:https://manual-cn.seafile.com/maintain/backup_recovery.html

概述

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

  • Seafile 资料库数据
  • 数据库

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

haiwen # 根目录,haiwen 为示例文件名,如果你安装到其他目录则为相应的目录名

--seafile-server-2.x.x # Seafile 安装包解压缩后目录 
--seafile-data   # Seafile 配置文件和数据(如果你选择默认方式)
--seahub-data    # Seahub 数据
--ccnet          # Ccnet 配置文件和数据
--seahub.db      # Seahub 用到的 sqlite3 数据库文件
--seahub_settings.py # seahub可选属性配置文件

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

Seafile 也在数据库中存储一些重要的元数据。数据库的命名和存储路径取决于你所使用的数据库。

对于 SQLite, 数据库文件也存储在 haiwen 目录。相应的数据文件如下:

  1. ccnet/PeerMgr/usermgr.db: 包含用户信息
  2. ccnet/GroupMgr/groupmgr.db: 包含群组信息
  3. seafile-data/seafile.db: 包含资料库元数据信息
  4. seahub.db: 包含网站前端(Seahub)所用到的数据库表信息

备份步骤

备份需要如下三步:

  1. 首先停掉 Seafile 服务器;
./seahub.sh stop # 停止 Seafile 进程
./seafile.sh stop # 停止 Seahub
  1. 备份数据库;
  2. 备份存放 Seafile 数据的目录;

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

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

备份数据库

SQLite

对于 SQLite 数据库,在备份前你需要停掉 Seafile 服务器。

sqlite3 /data/haiwen/ccnet/GroupMgr/groupmgr.db .dump > /backup/databases/groupmgr.db.bak.`date +"%Y-%m-%d-%H-%M-%S"`

sqlite3 /data/haiwen/ccnet/PeerMgr/usermgr.db .dump > /backup/databases/usermgr.db.bak.`date +"%Y-%m-%d-%H-%M-%S"`

sqlite3 /data/haiwen/seafile-data/seafile.db .dump > /backup/databases/seafile.db.bak.`date +"%Y-%m-%d-%H-%M-%S"`

sqlite3 /data/haiwen/seahub.db .dump > /backup/databases/seahub.db.bak.`date +"%Y-%m-%d-%H-%M-%S"`

备份 Seafile 资料库数据

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

直接拷贝整个数据目录,

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

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

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

rsync -az /data/haiwen /backup/data

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

让拷贝和 rsync 过程成功结束是非常重要的,否则你最近的一些数据将会丢失。

恢复备份

如果你当前的 Seafile 服务器已经坏掉,将使用另一台机器来提供服务,需要恢复数据:

  1. 假设在新机器中,Seafile 也被部署在了 /data/haiwen 目录中,拷贝 /backup/data/haiwen 到新机器中即可。
  2. 恢复数据库。

恢复数据库

现在你已经拥有了数据库备份文件,你可以按如下步骤来进行恢复。

SQLite

cd /data/haiwen
mv ccnet/PeerMgr/usermgr.db ccnet/PeerMgr/usermgr.db.old
mv ccnet/GroupMgr/groupmgr.db ccnet/GroupMgr/groupmgr.db.old
mv seafile-data/seafile.db seafile-data/seafile.db.old
mv seahub.db seahub.db.old
sqlite3 ccnet/PeerMgr/usermgr.db < usermgr.db.bak.xxxx
sqlite3 ccnet/GroupMgr/groupmgr.db < groupmgr.db.bak.xxxx
sqlite3 seafile-data/seafile.db < seafile.db.bak.xxxx
sqlite3 seahub.db < seahub.db.bak.xxxx

至此,整个备份和恢复的工作就完成了!值得注意的是,如果你的Seafile是配合Nginx实现了Web端访问的话,启动的时候别忘了参数是这样的:

./seafile.sh start
./seahub.sh start-fastcgi

我当时恢复备份后,在seahub.sh的start后面没加"-fastcgi"参数,结果客户端都可以连接,就是Web端死活打不开,差点就要重新来过了,才想起来这一茬。

升级指南

这里记录的升级仅限维护版本升级 (比如从 3.1.0 升级到 3.1.2),其他升级教程请参考官方手册:https://manual-cn.seafile.com/deploy/upgrade.html

类似从 3.1.0 升级到 3.1.2,为维护版本升级。

  1. 关闭 Seafile 服务(如果正在运行);
  2. 对于此类升级,只需更新头像链接,直接运行升级脚本即可(因为历史原因,此升级脚本命名为 minor-upgrade.sh):
cd seafile-server-3.1.2
upgrade/minor-upgrade.sh
  1. 运行升级脚本之后,启动新版本 Seafile 服务器,完成升级;
  2. 如果新版本运行正常,可以删除旧版本 Seafile 文件。
rm -rf seafile-server-3.1.0

我这里也保留了官方6.0.7版本的安装包:https://dl.yorkchou.com/software/seafile-server_6.0.7_x86-64.tar.gz
希望以上的教程能够帮到各位!

Last modification:July 10, 2019
If you think my article is useful to you, please feel free to appreciate