QingdaoU OnlineJudge 数据备份与恢复
HDUZN

平台本身提供了数据库的备份,还挺方便的。不过,发现只导入数据库的备份文件,还是有问题。就折腾了好一会。

Online Judge平台数据备份与恢复

1.数据备份

1).数据库备份(postgresql)

进入OnlineJudgeDeploy/backup目录,运行以下命令就会此目录下生成一个.sql数据库备份文件。

1
sh db_backup.sh

比如我得到了 db_backup_2022_12_16_13_51_41.sql 文件

2).data目录下的public和test_case文件夹备份

如果只用一个数据库文件,没有导入这两个目录,判题时会显示编译错误,点击会显示测试用例不存在。所以需要把这两个目录也从容器中复制出来。

因为直接用ftp工具发现不行,test_case目录都没有读的权限。所以,就直接从容器中把这两个目录复制出来。

比如我就在当前目录下新建一个temp_data目录,然后把public和test_case目录都复制到这个目录下:

1
2
docker cp oj-backend:/data/public ./temp_data/
docker cp oj-backend:/data/test_case ./temp_data/

2.数据恢复

必须先恢复数据库,再复制public和test_case目录。

不管是本机,还是换了一台新的机子,都可以用以下方法恢复数据,因为是很彻底的删除了数据库的。

1).数据库导入(postgresql)

先查看docker-compse.yml配置文件中配置的数据库容器、数据库名和数据库使用用户名:

  • 数据库容器:oj-postgres
  • 数据库名:onlinejudge
  • 数据库使用用户名:onlinejudge
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 1.拷贝数据(.sql)到数据库容器oj-postgres
docker cp db_backup_xxxxxxx.sql oj-postgres:/root

# 2.进入数据库所在容器
docker exec -it oj-postgres bash

# 3.删除原有数据库
# -U onlinejudge表示数据库user:onlinejudge
dropdb -U onlinejudge onlinejudge

# 删除的时候如果提示有其它用户在用,有2个sessions在用,无法删除,就需要先断开所有连接到这个数据库上的连接
# 1).登录postgresql数据库
psql -U onlinejudge
# 列出数据库
# \l or \list
# 2).断开所有连接到这个数据库上的连接,成功可以看到提示2 rows
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname='onlinejudge' AND pid<>pg_backend_pid();
# 3).退出postgresql
\q

# 再删除原有数据库
dropdb -U onlinejudge onlinejudge

# 4.创建数据库
# 数据库user:onlinejudge,数据库名:onlinejudge)
createdb -U onlinejudge onlinejudge

# 5.复制数据库,执行sql语句
psql -f /root/db_backup_xxxxxxx.sql -U onlinejudge

# 6.退出容器
exit

2).public和test_case目录导入

1
2
3
4
5
6
7
8
9
docker cp ./temp_data/public/ oj-backend:/data/
docker cp ./temp_data/test_case/ oj-backend:/data/

# 查看结果,进入oj-backend容器
docker exec -it oj-backend sh
# 列出/data目录,看到这两个目录的日期跟别的不同就是有效了
ls -l /data
# 退出容器
exit

再登录,发现所有的数据都恢复过来了。

  • 本文标题:QingdaoU OnlineJudge 数据备份与恢复
  • 本文作者:HDUZN
  • 创建时间:2022-12-16 22:36:39
  • 本文链接:http://hduzn.cn/2022/12/16/QingdaoU-OnlineJudge数据备份与恢复/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论