1.背景
由于公司业务需要,项目有一个每日通过推广实现返现功能。在测试环境进行测试的时候修改了定时任务执行时间为2s,实际生产环境中为为定时每天晚上2点。由于开发不慎导致部署到生产的执行时间为2s一次。污染了大部分的生产数据。由于平时频繁的更新,运维也没有做到部署前备份数据的操作。因此需要通过binlog日志恢复数据
2.binlog日志基本常识
binlog日志,即二进制日志文件。记录着mysql的所有sql变更操作。一般对于该日志文件我们主要用途有2个。一是增量备份(可以通过binlog日志来恢复数据),第二个是主从复制(即主节点维护一个binlog日志文件,从节点从binlog中同步数据增量备份)
关于主从复制之前有在搭建mysql主从进行了说明,此处不多介绍。本次主要讲讲如何恢复数据。
对于恢复数据常用的一条命令如下
/usr/bin/mysqlbinlog --start-datetime="2021-04-07 00:00:00" --stop-datetime="2018-04-07 20:58:00" --database=db_micro /var/lib/mysql/mysql-bin.000009 | /usr/bin/mysql -uroot -p123456 -v db_micro
其中需要修改的部分为开始时间、结束时间、作用的数据库、root账户及密码
上述命令表示对db_micro执行2021-04-01 20:57:55至2018-04-07 20:58:18所有的非查询操作语句
3.实际操作
虽然我们没有部署前备份数据,但是我们有每天的备份数据。于是我们找到了4月7号备份的数据库文件,在db_micro执行了sql。并执行了上述命令将数据库恢复到了4月7号晚上8点58分以前的样子。在修改java代码后重新部署
参考文献