我是靠谱客的博主 机智芹菜,最近开发中收集的这篇文章主要介绍【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的工具 其实可以到 
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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部