今日午休醒来,有点懵,测试环境truncate表时,清错了一张配置表,需要恢复。
但是该机器上没有备份机制,开发环境到是有,但极有可能数据不同步。
然后开始binlog按时间,与表名,确定了binlog的 --stop-position,但是没有用,因为binlog都是配合备份数据弄的,binlog只是导出执行日志,在当前状态下,再执行一遍,因为没有数据,都是update操作 依然还是空数据。
如果配合备份数据,恢复到之前某时刻状态,再用binlog将那个时刻到现在truncate之前操作再执行一遍,就是比较完美的思路。
后面多方查找,
好在同事之前做代运营,copy了一份环境,日期比较近,就直接先表数据弄好,再将binlog较长时间的操作导出执行,覆盖时间段内的操作。
binlog给人查看的文件导出命令(用于查找truncate的position数字):
mysqlbinlog --no-defaults --skip-gtids --start-datetime='2020-08-21 13:30:00' --stop-datetime='2020-08-21 15:00:00' --database=sm_xxx --base64-output=decode-rows -v /binlog_file_path/binlog.0000000x |grep -i -A 5 -B 5 truncate > /tmp/binlog0xx_trun.log
--no-defaults 用于解决