概述
使用mysqlbinlog解析 binlog
线上出现了类似 update table_a set a = 1, b=2 where id =123。
呈现的现象是 mysql中 b=2 a没有值
最后拿到业务日志大致确定了 update发生的大概时间。决定查看mysql中的binlog 拿到当时的sql定位问题。
去到mysql binlog的存放目录 一般是 mysql/data 看一下binlog 确定需要解析的binlog文件名
到 mysqlbinlog 工具的目录
cd /xx/mysql/mysqlbinlog
mysqlbinlog --no-defaults --start-datetime='2022-10-10 14:34:00' --stop-datetime='2022-10-10 14:50:00' mysql-bin.000869 > temp.sql
可以先过滤一下 命令结束 看一下 temp.sql 有没有内容。没有就不在当前的binlog中
mysqlbinlog --no-defaults --start-datetime='2022-10-10 14:34:00' --stop-datetime='2022-10-10 14:50:00' mysql-bin.000869 | grep '关键词' > temp.sql
--database=db 多个库可以使用 这个参数缩小范围
mysqlbinlog --no-defaults --database=db --base64-output=decode-rows -v --start-datetime='2018-01-08 02:01:00' --stop-datetime='2018-01-08 02:30:10' mysql-bin.000170 /tmp/binlog007.sql
window 我没找到合适的 解析 binlog的工具 其实可以到
mysqlbin 目录下 有 mysqlbinlog.exe 用cmd黑窗口 解析binlog 命令是一样的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/05479a98d88043deaf49ff37ea7c182c.png)
我最后拿到当时的sql
最后确定了问题
业务有两个功能 A B
A功能查询出数据 然后塞一些值 然后更新
B功能就是 update table_a set a = 1, b=2 where id =123。
A查询出数据 还没有update ,B功能完成了,更新了数据。然后A功能更新。由于A查的值比较旧,所以又覆盖了B update的值。
解决方案。是:A 在更新时不更新 a,b 字段
参考如下链接:
https://www.cnblogs.com/faster/p/16274217.html
最后
以上就是机智芹菜为你收集整理的【mysql】 使用mysqlbinlog解析 binlog的全部内容,希望文章能够帮你解决【mysql】 使用mysqlbinlog解析 binlog所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复