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
目前有三种格式,STATEMENT
,ROW
,MIXED
,ROW
一定会恢复,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