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

/**
* 保存数据,并调用发送报文方法
*/
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. Linux-搜索-文件-find-locate-内容过滤-grep

  2. [转帖]Jmeter笔记:使用Jmeter向kafka发送消息

    https://www.cnblogs.com/daydayup-lin/p/14124816.html 日常工作中有时候需要向kafka中发送消息来测试功能或者性能,这时候我们怎么办呢?我之前是自己 ...

  3. [转帖]Jmeter学习笔记(十一)——定时器

    https://www.cnblogs.com/pachongshangdexuebi/p/11571524.html 默认情况下,Jmeter线程在发送请求之间没有间歇.不设置定时器,短时间内会产生 ...

  4. [转帖]一文搞懂各种数据库SQL执行计划:MySQL、Oracle等

    https://zhuanlan.zhihu.com/p/99331255 MySQL 执行计划 Oracle 执行计划 SQL Server 执行计划 PostgreSQL 执行计划 执行计划(ex ...

  5. 编译打包rabbitmq然后一键部署的简单方法

    摘要 之前总结过一版,但是感觉不太全面 想着本次能够将使用中遇到的问题总结一下. 所以本次是第二版 介质下载 rabbitmq 不区分介质的打包文件 rabbitmq-server-generic-u ...

  6. 感性理解 int 与 long long 的速度差距 & 感性理解不同取模方法的差距

    long long 题该怎么做?#define int long long 会多慢? 有时候,当我们被卡常的时候,不妨想一想,自己在开头定义的 #define int long long 有多大影响? ...

  7. 纯c#运行开源本地大模型Mixtral-8x7B

    先看效果图,这是一个比较典型的逻辑推理问题,以下是本地运行的模型和openai gpt3.5的推理对比 本地运行Mixtral-8x7B大模型: chatgpt3.5的回答: 关于Mixtral 8x ...

  8. .net Core IsDefined、GetValues、HasFlag 使用

    IsDefined可以用于判断传入的单个值是否属于该枚举 GetValues检索指定枚举中常量值的数组 HasFlag 可以用于判断传入的多个值是否属于该枚举 先来个例子: public enum B ...

  9. 从零开始配置vim(21)——会话管理

    很多代码编辑器都有这么一个功能,重新进入编辑器之后能恢复上次打开的所有文件,窗口布局,有的甚至是上次设置的一些配置.那么vim是否也可以实现这样的功能呢?答案是肯定的.使用vim自带的会话管理和 vi ...

  10. TienChin 渠道管理-添加渠道页面开发

    略过,前面已将渠道管理的 index.vue 文件内容全部粘贴给你们了.