记一次修复 Hydro 502 异常 (如何保留数据重置Hydro OJ)

故障现象

我们最近搭建了一个Hydro OJ。搭建完成后偶然在网上发现了一个fps样式的题包,遂尝试导入。
首先是按照官方文档,执行安装fps-importer的指令。

yarn global add @hydrooj/fps-importer
hydrooj addon add @hydrooj/fps-importer

完成后,重启hydrooj。

pm2 restart hydrooj

令人在意的是,重启完成后就再也无法进入OJ了,一直提示502。

解决方案

尝试重启hydrooj,重启服务器,卸载插件后再重启,均无果。
尝试pm2 log,发现一直报127.0.0.1:8888 Connection Refused.
但其实平台应该是运行在80端口的。
各种排查无果,于是尝试备份服务器数据的情况下重置OJ。
先进行数据备份:

hydrooj backup

备份完成后留存数据包备用。
根据官方文档 的说明,执行如下指令:

pm2 stop mongodb
rm -rf /data/db /data/file
mkdir /data/db /data/file
pm2 start mongod
sleep 3
db_password=$(cat /dev/urandom | head -n 10 | md5sum | head -c 20)
echo "db.createUser({
  user: 'hydro',
  pwd: '$db_password',
  roles: [
    { role: 'readWrite', db: 'hydro' }
  ]
})" >/tmp/createUser.js
mongo 127.0.0.1:27017/hydro /tmp/createUser.js
echo "{\"host\":\"127.0.0.1\",\"port\":\"27017\",\"name\":\"hydro\",\"username\":\"hydro\",\"password\":\"$db_password\"}" >~/.hydro/config.json
pm2 stop mongod
pm2 del mongod
pm2 start mongodb
pm2 restart all
pm2 save

完成后打开OJ网页测试,可正常访问。
于是恢复备份的数据:

hydrooj restore <备份包位置>

至此,修复工作完成。大部分数据得以保留。
不得不说,备份是个很实用的功能。

类似文章

2条评论

  1. 更新一下吧,报错
    “`
    127.0.0.1:8888 Connection Refused.
    “`
    的原因是因为hydro其实是运行在8888端口上的,80端口是一个自带的反代。

  2. Greetings from Colorado! I’m bored to tears at work so I decided to browse your site on my iphone during lunch break.
    I really like the knowledge you provide here and can’t wait to take a look when I get home.
    I’m amazed at how quick your blog loaded on my
    cell phone .. I’m not even using WIFI, just 3G .. Anyways,
    great blog!

回复 visit article 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注