将ubuntu设置为NAS——23.seatable数据备份迁移
前言
之前文章介绍过将ubuntu设置为NAS——13.搭建新型在线协同表格和信息管理工具Seatable,目前稳定在离线的办公局域网使用,方便多人协作收集表格资料,在离线环境中,seatable确实是款非常好用的在线表格,当然它目前已经不仅仅是在线表格,支持JavaScript和python脚本,可以作为可视化在线数据库来使用,搭配脚本应该有更广阔的使用场景(本人这方面深入不足,还在探索中),每月会有新版本更新,搭配插件功能,即使是免费的开发版,我也是感觉越来越完善。最近私人的离线服务器遇到些问题,需要备份相关seatable数据,并转移到另外一台服务器中去(不同IP),相关教程其实官方做的还是比较详细的,但我实践中还是遇到失败的情况,遇到了些小白才会犯的错误,索性记录一下,就又水了这篇文章。
1、备份原数据
首先需要新建备份数据用文件夹,再进入此文件夹
sudo mkdir /home/yang/seatable-bak
备份数据分为2步,首先备份数据库文件,再备份数据。
1.1、备份数据库
备份数据库
# 首先进入新建备份数据文件夹
cd /home/yang/seatable-bak
# 备份用户和组信息数据
docker exec -it seatable-mysql mysqldump -uroot -pMYSQL_ROOT_PASSWORD --opt ccnet_db > ccnet_db.sql
# 备份资料库元数据信息
docker exec -it seatable-mysql mysqldump -uroot -pMYSQL_ROOT_PASSWORD --opt seafile_db > seafile_db.sql
# web前端使用的表
docker exec -it seatable-mysql mysqldump -uroot -pMYSQL_ROOT_PASSWORD --opt dtable_db > dtable_db.sql
以上是官方教程相关命令,这里对于像我这样的小白就会有些坑,如果机械复制上述命令,可能导致备份失败.
命令行没有返回错误信息,数据库文件也出现在备份文件夹里了,但大小是不对的,只有1KB,备份其实是失败了。
首先确保docker下的seatable已经通过docker-compose方式运行了,输入docker ps命令确认,出现如图所示容器即可。
然后需要修改命令,请将命令中的-pMYSQL_ROOT_PASSWORD修改为-p+docker-compose.yml文件中设置的密码,比如我的docker-compose.yml。
命令就修改为以下内容,替换MYSQL_ROOT_PASSWORD为自己的数据库密码
# 备份用户和组信息数据
docker exec -it seatable-mysql mysqldump -uroot -pPASSWORD --opt ccnet_db > ccnet_db.sql
# 备份资料库元数据信息
docker exec -it seatable-mysql mysqldump -uroot -pPASSWORD --opt seafile_db > seafile_db.sql
# web前端使用的表
docker exec -it seatable-mysql mysqldump -uroot -pPASSWORD --opt dtable_db > dtable_db.sql
显示有数据大小合适了,就是成功备份好数据库了。
1.2、备份数据库目录
官方介绍2种方案,一种是全量备份,另一种是增量部分,由于我是首次备份,首先直接全量备份,全量备份很简单,注意其中数据为docker映射路劲,请根据docker-compose.yml文件设置。
#简单的复制方式,有个不好就是看不到进度,文件比较大的化,可能有死机假象,不推荐
cp -R /docker/seatable/seatable-data/seatable /home/yang/seatable-bak
#增量备份,推荐,加了--progress 可以看到进度,界面友好
rsync -az --progress /docker/seatable/seatable-data/seatable /home/yang/seatable-bak
# 删除其中的日志文件
cd /home/yang/seatable-bak/seatable && rm -rf ccnet logs
我先是采用cp方式,数据文件量比较大的话,需要等待较长时间,没有什么提示,有点像死机了。
后面等了2个小时还是没有动静,发现确实是死机了,看来cp方式不是很可靠,只好选择rsync方式备份
rsync -az --progress /docker/seatable/seatable-data/seatable /home/yang/seatable-bak
2、恢复数据
在另外一台主机上先采用docker-compose方式搭建seatable,过程不再赘述,安装完毕先不要使用docker exec -d seatable /shared/seatable/scripts/seatable.sh start启动。
恢复数据库,教程命令是如下,按照上面的情况,需要修改-pMYSQL_ROOT_PASSWORD,改成docker-compose.yml中的数据库密码,尝试重新搭建的seatable的数据库设置为不同的密码。
docker exec -i seatable-mysql /usr/bin/mysql -uroot -pMYSQL_ROOT_PASSWORD ccnet_db < /opt/seatable-backup/databases/ccnet_db.sql
docker exec -i seatable-mysql /usr/bin/mysql -uroot -pMYSQL_ROOT_PASSWORD seafile_db < /opt/seatable-backup/databases/seafile_db.sql
docker exec -i seatable-mysql /usr/bin/mysql -uroot -pMYSQL_ROOT_PASSWORD dtable_db < /opt/seatable-backup/databases/dtable_db.sql
所以按照教程需要修改命令,需要恢复的数据库文件请复制到新主机容易找到的位置(可以用winscp上传文件)
docker exec -i seatable-mysql /usr/bin/mysql -uroot -plao12345678 ccnet_db < /opt/seatable-backup/databases/ccnet_db.sql
docker exec -i seatable-mysql /usr/bin/mysql -uroot -plao12345678 seafile_db < /opt/seatable-backup/databases/seafile_db.sql
docker exec -i seatable-mysql /usr/bin/mysql -uroot -plao12345678 dtable_db < /opt/seatable-backup/databases/dtable_db.sql
恢复 SeaTable 数据,可以直接用winscp上传备份数据到容器映射目录,按照docker-compose.yml中的设置路径进行。
请由于搭建seatable后,数据目录文件在最后一张图/docker/seatable/seatable-data/seatable,原备份文件中的conf文件夹不要复制过去,用新生成的文件,由于原备份文件的地址等设置与新的主机是不一样,直接复制过去网页就打不开了。
方便文件复制和拖拽可以设置winscp以root登入。
正常从一台主机直接拖拽文件复制到winscp登录的服务器,可能提示没有权限,主要原因是没有root权限,需要我们使用root用户进行操作,但是WinSCP并不能默认使用root用户进行登录,解决方法是:
1. 先使用 sudo passwd root 设置好密码(已设置可忽略这步)。
2. 然后在/etc/ssh/sshd_config中找到PermitRootLogin 这一行将后面的参数改为yes 保存退出。
sudo nano /etc/ssh/sshd_config
3. 重启service ssh restart 。
4. 重新打开winscp 重新编辑登录信息,使用root用户登录就可以直接拖拽文件。
复制完成后,启动seatable脚本。
docker exec -d seatable /shared/seatable/scripts/seatable.sh start
用原数据库文件登录就可以发现数据恢复成功了。
当然目前这种转移备份数据恢复的办法,其实还是存在一些问题,由于2台服务器是不同的IP地址,备份后其中的图片或文件类型的数据,由于对应的IP数据也直接复制过来,导致在新IP下无法正常显示或下载相关图片和文件,其对应的文件或图片地址还是指示老服务器的地址,其实文件或图片已经正常存储到了新服务器中,只是地址错了,目前这个只能自行编辑javascript脚本对对应的表格内容进行修改。
总结
本人在备份恢复seatable过程中,遇到了数据库备份错误无提示的和全量备份失败的情况,这里主要是自己对教程理解不深,经过折腾发现其中的问题,总算最后成功了。转移备份数据过程中出现文件和图片无法正常显示和下载的问题,最后是通过学习官方的javascript脚本语言搞定,也发现了脚本功能的强大。
种草好朋友
校验提示文案
mingjinglyh
校验提示文案
davidseiya
校验提示文案
mingjinglyh
校验提示文案
davidseiya
校验提示文案
种草好朋友
校验提示文案