【mysql】 使用mysqlbinlog解析 binlog

使用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的工具 其实可以到 
mysql\bin 目录下 有 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值