首页 > 基础资料 博客日记
MySQL查看bin_log日志
2024-01-30 10:39:57基础资料围观231次
这篇文章介绍了MySQL查看bin_log日志,分享给大家做个参考,收藏Java资料网收获更多编程知识
有这样一段业务逻辑,首先保存业务数据,然后发送报文,最后确认报文回来以后更新业务数据。伪代码大概是这样的:
/**
* 保存数据,并调用发送报文方法
*/
public void save() {
// 0.保存数据
// 调用send()方法
send();
}
/**
* 发送报文
*/
public void send() {
// 1.发送报文(调用Dubbo服务)
// 2.更新数据状态
}
/**
* 回调
*/
public void callback() {
// 3.收到确认报文
// 4.查询业务数据,并更新数据状态
}
然而,出问题了。。。
在回调方法中,根据业务单号查询业务单数据时查不到。这刚插入的数据,怎么就查不到呢?
首先排除了MyBatis-Plus的问题,因为代码写法肯定是没有问题的,然后我想有可能是确认报文回来太快了,导致查询的时候插入还没完成,但是细想之下又觉得不太对,在发送报文之前数据已经保存成功了。于是,问题变成了数据保存成功,但是查不到,应该是事务的问题,即保存成功了,但是还没提交,而隔离级别又是“可重复读”,所以在回调处理的时候查不到未提交的数据。但是我没有加事务。
带着疑问,我查看了bin-log日志,这里需要用到mysqlbinlog命令
mysqlbinlog --help
mysqlbinlog --database=draft_cust --start-datetime="2024-01-29 11:00:34" --stop-datetime="2024-01-29 11:00:37" -v D:\mysql-bin.000005
仔细找BEGIN ... COMMIT ,看看事务到底什么时候开启的,什么时候提交的
虽然BinLog日志里面不记录SELECT,但是结合服务端的日志,我发现在执行回调方法查询业务数据的时候,这个事务还没有提交
真相大白了
但是明明没有加事务,为何到现在才提交事务呢?原来是别人调用我的这个方法,但是调用的方法上加了本地事务,所以导致我这段逻辑也整个都在事务中,也就是直到send()方法执行完以后事务才提交,好巧不巧的是发报文是调用远程Dubbo服务,相当于是异步调用,不受本地事务控制,所以才出现了开头那一幕,回调方法先回来,此时send()方法还没执行完,事务没提交,自然也就查不到
唉。。。
文章来源:https://www.cnblogs.com/cjsblog/p/17996595
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: