EOSIO MongoDB 插件系列:从 log 中找回丢失的插入记录

October 9, 2019 · View on GitHub

作者: UMU @ MEET.ONE 实验室 支持我们,请投票给 rex.m

问题

当 MongoDB 因不可抗力故障,nodeos 重启后会丢失上次故障时正在插入的记录。

解决

nodeos 会将插入语句连同错误原因等信息一起写入 log,这给了我们手动修复丢失的机会。下面以 transaction_traces 为例,介绍修复流程。

1. 找出所有失败记录

grep 'mongo exception, trans_traces insert:' *.log > lost.txt

2. 从 log 生成 mongo script

echo 'print("++++");
var eos = db.getSiblingDB("EOS");' > lost.js

cat lost.txt | sed -n 's/.*, trans_traces insert: \(.*\), line 920, code.*/eos.transaction_traces.insert(\1)/p' >> lost.js

echo 'print("----");' >> lost.js

3. 导入 MongoDB

nohup mongo mongodb://$user:$password@127.0.0.1:$port/admin lost.js > lost.log &