有这样一段业务逻辑,首先保存业务数据,然后发送报文,最后确认报文回来以后更新业务数据。伪代码大概是这样的:

/**
* 保存数据,并调用发送报文方法
*/
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()方法还没执行完,事务没提交,自然也就查不到

唉。。。

MySQL查看bin_log日志的更多相关文章

  1. mysql 查看 删除 日志操作总结(包括单独和主从mysql)

    我们可以在mysql的安装目录下看到mysql的二进制日志文件,如mysql-bin.000***等,很多人都不及时的处理,导致整个硬盘被塞满也是有可能的.这些是数据库的操作日志.它记录了我们平时使用 ...

  2. MySQL | 查看log日志

    1. 进入mysql mysql -u用户名 -p密码 2. 开启日志 et global general_log=on: 3. 查看mysql日志文件的路径 show variables like ...

  3. mysql查看binlog日志

    1.语法:(用于在二进制日志中显示事件.如果您不指定’log_name’,则显示第一个二进制日志.LIMIT子句和SELECT语句具有相同的语法.) show binlog events [IN 'l ...

  4. 登录到mysql查看binlog日志

    查看当前第一个binlog文件的内容 show binlog events; 查看指定binlog文件内容 show binlog events in 'mysql-bin.000002'; 查看当前 ...

  5. mysql查看bin日志命令

    mysqlbinlog --no-defaults   --base64-output=decode-rows -v  --start-datetime='2016-01-14 16:30:00' - ...

  6. 解说mysql之binlog日志以及利用binlog日志恢复数据

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  7. Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...

  8. 【转】Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  9. mysql通过查看跟踪日志跟踪执行的sql语句

    在SQL SERVER下跟踪sql采用事件探查器,而在mysql下如何跟踪sql呢? 其实方法很简单,开启mysql的日志log功能,通过查看跟踪日志即可. 开启mysql的日志log方法: wind ...

  10. 开启mysql慢查询日志并使用mysqldumpslow命令查看

    mysql服务器有一项功能,可以检测到哪条sql语句查询得比较慢,就是慢查询slowlog,现在介绍如何开启. 在[mysqld]下面增加如下代码: long_query_time = 1 log-s ...

随机推荐

  1. AHB-SRAMC Design-02

    AHB-SRAMC Design SRAMC(另外一种代码风格)解析 SRAM集成,顶层模块尽量不要写交互逻辑 module ahb_slave_if( input hclk, input hrest ...

  2. EasyNetQ(RabbitMQ)在处理消息时,如果抛出异常,继续不断发送到订阅队列,不断处理(也就是不自动确认消息已到达)

    默认情况下,EasyNetQ的消息处理过程中,如果throw exception,那么,依然是认为消息已经送达,不会再次推送,为了让RabbitMQ再次推送,可以这么实现: public sealed ...

  3. ubuntu-软件管理工具-apt

  4. [转帖]Kafka可靠性之HW与Leader Epoch

    <深入理解Kafka:核心设计与实现原理>是基于2.0.0版本的书 在这本书中,终于看懂了笔者之前提过的几个问题 准备知识 1.leader里存着4个数据:leader_LEO.leade ...

  5. [转帖]【杂学第十二篇】oracledb_exporter监听oracle19c数据库出现libclntsh、ORA-12162、ORA-00942异常解决

    http://www.taodudu.cc/news/show-4845374.html docker run -d --name oracledb_exporter --restart=always ...

  6. [转]流程自动化机器人(RPA)概念、原理与实践

    [转]流程自动化机器人(RPA)概念.原理与实践 http://blog.sina.com.cn/s/blog_be0833d00102yho9.html 大多数人每天都会使用到一些机器人流程自动化工 ...

  7. vue中keep-alive详细讲解

    场景 今天产品跑过来跟我说, 当我在A页面修改数据后,去B页面. 然后返回A页面.希望A页面保留我修改后的数据. 而不是数据又恢复最初的样子了.我心里想,尼玛,又要加班了? 看下面小粒子 数据被被重置 ...

  8. c#通过表达式树优雅的实现分组取TopN笔记

    需要引入nuget包来实现ef.functions调用row_number Thinktecture.EntityFrameworkCore.SqlServer 调用方式: //顺排 context. ...

  9. 【K哥爬虫普法】百亿电商数据,直接盗取获利,被判 5 年!

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  10. 【k哥爬虫普法】Python程序员爬取视频资源13万部,一分钱没挣,获刑2年!

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...