MySQL通过binlog恢复误删数据
docker安装mysql并开启binlog
1、在linux
中对应的挂载目录,我这里使用的是/mydata/mysql/my.cnf
,创建mysql配置文件my.cnf
,内容如下:
1 | !includedir /etc/mysql/conf.d/ |
2、执行docker命令直接进行安装,看到如下提示说明安装成功了
1 | docker run -di -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/my.cnf:/etc/mysql/my.cnf --privileged=true --restart=always -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=admin -d mysql:5.7 --lower_case_table_names=1 |
3、使用docker ps -a
查看mysql的运行状况
4、查看当前的log_bin
的开启情况
1 | SHOW VARIABLES LIKE 'LOG_BIN%'; |
如果未开启状态,则需要在my.cnf
中添加如下配置并重启mysql服务
1 | [mysqld] |
5、同样如果某些表不需要进行记录,也可以在配置文件中进行设置忽略
1 | test = |
如何通过binlog恢复数据
首先查看当前mysql时间是否与服务器时间一致
1 | select now(); |
如果时间不一致,会影响一会我们排查具体操作的时间范围,可以使用如下命令修复,修复后需要重启mysql服务
1 | docker cp /usr/share/zoneinfo/Asia/Shanghai 容器id:/etc/localtime |
然后进入docker容器中lob_bin_basename
的位置,我这里是/var/lib/mysql/
,然后找前缀为mysql-bin
的日志文件
1 | docker exec -it 容器名称 bash |
然后通过mysqlbinlog
导出要查询的日志到tmp.log
文件,这里需要根据大概的操作时间按点来进行筛选
1 | mysqlbinlog --no-defaults -v --base64-output=DECODE-ROWS --start-datetime='2022-01-22 00:00:00' --stop-datetime='2022-01-22 23:00:00' mysql-bin.000003 > tmp.log |
到这里就可以根据表名或者其他关键字进行查找恢复了
转载请注明出处 谢谢~
评论