mysql 通过mysqlbinlog数据还原

mysql 通过mysqlbinlog数据还原

环境:docker + mysql8.0.33 

1. 检查mysql版本

控制台登录 mysql

mysql -uroot -p
123456

 

select version();

 

 

2. 查看binlog日志,参考:https://blog.csdn.net/weixin_67271870/article/details/126841152

 

show variables like 'log_bin'; //查询是否启用了日志,on=启用,off=未启用
show binary logs; //获取binlog文件列表
show binlog events in 'mysql-bin.000002'; //查看指定binlog文件的内容

 

 

 3. 查看binlog格式,参考:https://blog.csdn.net/qq_38486203/article/details/122229081

  目前有三种格式,STATEMENTROWMIXEDROW一定会恢复,MIXED大概率会恢复,STATEMENT用这种方法未必能恢复,可以试试。

SHOW VARIABLES LIKE '%binlog_format%';

 

 

4. 使用mysqlbinlog

场景:如误删数据库、修改数据时忘记使用where条件等

 

注:mysql 在 8.0.30版本后,不再默认安装mysqlbinlog工具了。

解决方案:

新创建一个mysql的容器,镜像使用 mysql:8.0.31-debian,debian版本会默认安装mysqlbinlog工具。

把 /usr/bin/mysqlbinlog 文件拷贝到 原mysql 对应的文件夹中

 

跟据日志时间,找到修改数据的日志文件,

注:修改时间是文件结束时间,不是创建时间

 

5. 过滤日志文件

进入控制台,执行命令,

注意文件内的时间 = 实际时间 - 8小时

mysqlbinlog --no-defaults -v --base64-output='decode-rows' -d mate --start-datetime="2023-08-02 01:00:00" --stop-datetime="2023-08-02 10:00:00" /var/lib/mysql/binlog.000029 > events3

 

数据库名:mate 
误操作时间段:2023-08-02 01:00:00 、2023-08-02 10:00:00 (实际时间 - 8小时)
日志路径:/var/lib/mysql/binlog.000029
导出文件名:events3 

 

拿到文件打开进行分析,内含update数据

 把里面的 sql 语句 转换一下,组织成需要的sql文句,拿到 Navicat 或 sqlyon 中执行即可。

 文件解析项目:NETCORE.MysqlBinLog

 

 

 

 

 

引用:https://blog.csdn.net/weixin_67271870/article/details/126841152

引用:https://www.yingsoo.com/news/companys/59032.html

引用:https://www.cnblogs.com/bianxj/articles/8876733.html

posted @ 2023-08-04 15:06  无心々菜  阅读(204)  评论(0编辑  收藏  举报