青岛OJ(QingdaoU/OnlineJudge)的开发与使用(4)——备份与恢复
原文链接:这里
0.前言
前面一篇文章中,我们手动导入题目,也可以按照预先设定好的部分导入题目,这篇文章我们尝试备份与恢复操作。
1.本机的备份与恢复
我这里创建了几个用户,和一些题目。然后我们删除这些用户和题目看能不能恢复数据。
在我们一键安装的版本中,在backup文件下有个官方写好的备份脚本。我们只需要切换到bakcup目录下,然后执行
sh db_backup.sh
然后就在此目录下生成了一份备份数据。
然后我们把本机的用户数据,题目数据都删除。
#拷贝数据到数据库所在容器
docker cp db_backup_xxxxxxx.sql oj-postgres:/root
#进入数据库所在容器
docker exec -it oj-postgres bash
#登录数据库
psql -U postgres
#删除原有数据库
drop database onlinejudge;
#退出
\q
#复制数据库,执行sql语句
psql -f /root/db_backup_xxxxxxx.sql -U postgres
如果在登录数据库过程中遇到:psql: FATAL: role “postgres” does not exist,请点击这里查看解决办法。
然后我们发现,用户和题目数据都回来了。
2.机器与机器之间的迁移与恢复
假如一个新机器需要同步数据。
第一种方法是:要保证已经新部署了一套 OnlineJudge,然后需要恢复数据和测试用例文件。测试用例存储在 data/backend/test_case
文件夹中,覆盖即可,然后就是跟上面的类似,恢复数据库即可。
第二种方法更简单。直接把原来的OnlineJudgeDeploy 文件夹整体复制到新机器上,然后docker-compose up -d 即可。
我们做下简单测试,先把整个online文件夹打包压缩,然后删除所有的容器,连镜像一块删除。
然后再把我们打包的压缩包解压,cd 到我们解压的目录下,重新执行docker-compose up -d
然后我们发现,执行完后重新访问前端,发现还是熟悉的界面。
3.总结
不论怎样,一定要做好备份,不要随便乱折腾。