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.总结

不论怎样,一定要做好备份,不要随便乱折腾。


返回目录:OnlineJudge