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

/**
* 保存数据,并调用发送报文方法
*/
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_BUS的eFlash控制器设计-软硬件系统设计

    eFlash软硬件系统设计 软硬件划分 划分好软硬件之后,IP暴露给软件的寄存器和时序如何? 文档体系:详细介绍eflash控制器的设计文档 RTL代码编写:详细介绍eflash控制器的RTL代码 1 ...

  2. java - 标准类的定义

    一个标准的类需要拥有下面 4个 组成部分: 1. 所有的成员变量都要使用 private 关键字进行修饰 2. 为每一个成员变量编写 set.get 方法 3. 创建一个无参数的构造方法 4. 创建一 ...

  3. Oracle12c On 银河麒麟v10SP3 的安装过程

    Oracle12c On 银河麒麟的安装过程 学习官网资料 下载最新版的preinstall文件 https://yum.oracle.com/repo/OracleLinux/OL8/appstre ...

  4. lightning 导入数据库表的操作步骤

    lightning 导入数据库表的操作步骤 TiDB数据库备份恢复的方式与方法 1. mysqldumper 以及 mysql 导入 2. select into outfile 以及 load da ...

  5. [转帖]KingbaseES 服务器运行参数分类

    https://www.cnblogs.com/kingbase/p/16969149.html Kingbase 服务器运行参数分类 说明: KingbaseES 数据库中,服务器运行参数分为多种类 ...

  6. [转帖]开源软件项目中BSD、MIT许可证合规问题探析

    https://www.allbrightlaw.com/CN/10475/3be2369275d19e9e.aspx   [摘要]本文将探析BSD开源许可证(Berkeley Software Di ...

  7. vue3中mixins的使用

    vue3-mixins 在开发的过程中我们会遇见相同或者相似的逻辑代码. 可以通过vue的 mixin 功能抽离公共的业务逻辑, 然后通过impor再组件中引入.通过mixins注册进来. 这样我们就 ...

  8. ES6 Array.fiill()的用法

    简单使用 // arr.fill(value, start, end) // value填充的值 // start填充的起始位置包含 // end填充的结束值,不包含,如果省略这个参数,表示从起始位置 ...

  9. 基于NET Core 的Nuget包制作、发布和运用流程

    开发缘由:公司需要调用天眼查-开放平台 ,验证客户的的营业执照信息是否在存续期,并将企业基本信息返回,之后和使用百度图文识别的企业信息进行对照是否一致. 前期准备 在网站中注册后,需要够买套餐.之后点 ...

  10. 使用AI辅助写代码

    市面上的AI写代码 GitHub +OpenAI 出品的Copilot:https://copilot.github.com/ Tabnie:Code Faster with AI Code Comp ...