基于ThinkSystem SR650 的Seafile Server 备份与恢复

去大理

拍了很多美照

存到网盘

数据却突然丢了?

好用的网盘固然能给我们生活带来很多方便,但是依然存在数据丢失的风险,如何才能保证自己数据的安全呢?接下来小编给大家介绍seafile server的备份与恢复,延续上个话题;

感谢 Jacky Jiang 的来稿

一,准备工作

1.1说明

通过上篇文章,我们已经安装好Seafile服务器,Seafile服务器已经可以正常使用了。接下来我们要考虑的是如何对数据进行保护,所以本篇我们来介绍一下如何对Seafile服务器进行备份和恢复操作。

1.2 选择备份目的地

数据可以备份在本地,我们称之为本地备份,但安全性不高,如果主机磁盘发生故障,有可能导致备份的数据也一同无法读取。安全的办法是做异地备份,本文中所指的异地备份是指的将数据备份到一台独立的备份服务器中。

备份服务器与Seafile服务器完全独立。这样即使Seafile服务器发生毁灭性故障,数据还是可以恢复的。本文中使用一台安装有CentOS7.5的服务器作为备份服务器。备份服务器也可以是一台虚拟机。当然,也可以选择云服务器将数据备份到云端。

1.2.1 说明

Seafile 备份分为两部分内容:

Seafile 资料库数据: 安装目录中的所有文件

数据库:数据库中存储一些重要的元数据

1.2.2 安装目录的结构

l--seafile-server-x.x.x #Seafile 安装包解压缩后目录

l--seafile-data #Seafile 配置文件和数据(如果你选择默认方式)

l--seahub-data #Seahub 数据

l--ccnet #Ccnet 配置文件和数据

l--seahub.db #Seahub 用到的 sqlite3 数据库文件

l--seahub_settings.py #seahub可选属性配置文件

1.2.3 数据库结构

如果你是按默认方式配置的数据库,将会有以下三个数据库,如果你是自定义的数据库名称,那么就按自己定义的名称来备份

ccnet-db: 包含用户和群组信息

seafile-db: 包含资料库元数据信息

seahub-db: 包含网站前端(seahub)所用到的数据库表信息

二、手动备份

2.1 备份MySQL

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

执行以下三条命令:

注:命令中的/home/Backup/databases/是本地备份目录,可以按自己习惯进行创建。后面加上`date +"%Y-%m-%d-%H-%M-%S"` 可以在备份文件后面自动加上日期时间,这样便于后期对备份文件的管理。

执行完上面三条命令后,数据库就备份完成了。这里我们使用的数据库引擎是MySQL,如果你的数据库不是MySQL,比如是SQLite,备份方法是不一样的。对于 SQLite 数据库,在备份前你需要先停掉 Seafile 服务器,才能进行备份。

2.2 备份资料库数据

由于所有的数据文件都存储在安装目录,这里我的目录是 /home/Seafile , 所以备份整个目录即可。

执行以下命令进行copy,注:命令中的/home/Backup/data是我建的目录,可以按自己习惯进行创建。

备份完成后,所有数据都被备份到一个目录中,以日期时间进行标注,便于后期管理。备份的时间长短取决于整个资料库的大小,以及服务器硬件的性能,我这里备份了300G的资料,并且是备份在了同一个卷上面,一共花费了1个小时。

2.3 将备份数据复制到服务器

前面我们已经讲文件备份到了本地磁盘上,我们需要将备份数据保存到一台独立的备份服务器上。这样才真正起到备份的作用。

2.3.1设置免密访问

配置seafile服务器免密访问备份服务器,这样每次备份文件时就不用输入密码了。同样如果是运行脚本自动备份,就更需要做这个配置。

如果ssh端口非默认的22端口,则需要加上端口,例如:

2.3.2拷贝数据

执行以下命令,-r参数为拷贝整个目录,否则拷贝过去的都是文件而不带目录。这里300G的文件耗时20分钟,具体时间还要看网络的性能和主机的磁盘IO性能。拷贝期间可以使用iftop等工具查看传输速度和进度。

以同样的方式把数据库的备份文件也copy到备份服务器,同样在copy之前最好在备份服务器上建好备份目录,方便日后管理。

注:数据的完整性很重要,所以一定要保证数据完全传输完成。

2.4增量备份

如果每次备份都通过上面的方式进行,会非常耗时间。第一次完整备份以后,以后的备份我们可以采用增量备份的方式进行,这样只对新增加或备修改过的数据进行备份,大大减少备份工作量及节约时间。

以下举个增量备份的例子:

在test目录创建两个文件test1.log和test2.log,此时data目录是空的,执行命令:

可以看到test1.log和test2.log被复制到了data目录中,在test目录创建test3.log,再次执行同步命令,可以看到这次只有test3.log被拷贝过去。

同样也可以使用以下命令直接对备份服务器上的备份目录做增量备份。如果需要保存多副本,不建议直接对备份服务器做增量,还是先在本地做增量,修改一下名件名的时间,再拷贝到备份服务器,这样可以在备份服务器上保留多个副本。

三、自动备份

3.1 说明

自动备份我们采用定时自动运行脚本的方式来执行备份操作。利用scp自动上传备份文件到备份服务器指定的目录中

3.2 编写脚本

以下是一个脚本的例子,按自己的规划进行修改。

编辑完成后,

chmod +x /home/Backup/backfile.sh,添加执行权限。脚本编辑就完成了。用脚本备份出来的压缩文件类似下图中的“home-Seafile-180815.tar.gz”

3.3 配置计划任务

3.3.1说明

这里我们通过crontab来实现定时自动运行脚本。首先确认cron服务的状态,如果未启动,先将其启动。

3.3.2 设置开机自动启动crond服务

或者在 /etc/rc.d/rc.local 脚本中加入/sbin/service crond start 即可

3.3.3 编辑crontab脚本

3.4 按需配置脚本

通过crontab,可以配置自动执行更多任务,比如可以在这里添加自动删除超期的备份文件,以释放磁盘空间。可以在Seafile服务器和备份服务器同时配置。这样就做到了按计划执行备份和管理备份文件。

四、规划备份方案

4.1 需求分析

在我的环境中,我可以采用一台独立的服务器做为备份服务器,并且备份的数据都是Seafile服务器中的资料数据,所以我采用的备份方式是利用计划任务,定期将数据向备份服务器做增量备份,这样每次备份的数据量相比每次完全备份要小很多,减少备份工作量同时也降低Seafile服务器的IO压力。

4.2 开始实施

4.2.1在备份服务器中创建好存放备份文件的相关目录。在Seafile服务器上先执行一次完全备份,并将备份完全拷贝到备份服务器的相应目录中。确保在备份服务器中已经有一份完整的备份。也可以直接用rsync做第一次完整备份。

4.2.2 验证rsync远程备份可用。

这个可以先手动执行一次远程增量备份,确定远程增量备份可以成功执行。

备份前data目录为空:

执行备份:

备份后data目录为198G:

向网盘中上传了一些新文件,执行增量备份:

可以看到备份目录的容量变化:

4.3 编辑定时任务脚本

在Seafile服务器中,编辑crontab脚本,利用rsync做定时自动的增量备份

编辑 /etc/crontab,加入一行计划执行的任务,这里我们计划的是每周6凌晨1点30分自动执行一次增量备份。

4.4 利用脚本备份其他资料文件

利用自动化任务脚本,同样可以对数据库和其它需要备份的配置文件进行备份,如下图,一共有5个计划任务在每周六凌晨1点30分开始执行:

对ccnet-db进行备份并自动上传到备份服务器

对seafile-db进行备份并自动上传到备份服务器

对seahub-db进行备份并自动上传到备份服务器

对Nginx配置文件进行备份并自动上传到备份服务器

对Seafile安装目录进行备份并自动上传到备份服务器

下面是计划任务的详细信息:

五、恢复备份

5.1恢复资料数据

假设Seafile服务器完全坏掉,或者你要将Seafile服务器搬迁到新的主机中,并且已经按前两篇文档完全重新搭建了一台Seafile服务器。只需要将备份的资料数据完全拷贝到新的服务器中就可以了,比如这里我们是将备份服务器中/home/Backup/data/seafile-2018-08-15-01-33-10目录中的所有文件拷贝到新服务器中即可。这里就不演示详细过程了。

5.2 恢复数据库

举例,按如下步骤来进行恢复:

六、注意事项

恢复后,可能会由于环境改变而导致Seafile无法启动, 可以检查一下Seafile的配置文件,以及Nginx的配置文件,比如IP地址需要修改。另外如果启用了OPEN SSL或者有Let’s Encrypt证书,需要将相关证书导入到新服务器中,或者重新生成证书。

七、总结

7.1 以上我们介绍了本地备份的方法和远程备份的方法。 同时也介绍了手动备份和利用计划任务实现自动备份的方法。在实际运用中,可以根据自己的实际情况来设计备份方案。

7.2比如你没有其它的主机,只能实现本地备份,那么就可以参照上面的方法做本地自动化增量备份。假如你的数据量很小,其实也可以通过windows利用WinSCP定期复制数据。总之我们的目的就是要将数据复制出多个副本并保存在不同的地点。

声明:本系列一共三篇文章,由于第二篇内容验证工作还未完成,所以先将第三篇发布;

若有疑问可直接在公众号中留言,我们接到反馈,会及时回复,感谢您的阅读,如果您喜欢我们的文章,还请关注并帮忙宣传;

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181130G1BPON00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券