mysql binlog查看历史sql执行记录方式

 更新时间:2025年10月30日 11:12:41   作者:云原生运维  
文章介绍了如何在MySQL的binlog中查找问题,以确定开发同学反馈的ORM操作是否真的导致了测试库数据丢失,通过检查binlog,确认数据库是否开启了binlog,并使用mysqlbinlog工具过滤日志,最终找到了问题的真相

前情提要

最近有开发同学把测试库的数据干没了,反馈说是orm做了字段text转mediumtext操作导致的。

作为变更字段类型,且是兼容的理论上不可能存在这个问题,所以为了一探究竟他到底说的是不是假话,我决定在binlog里找找蛛丝马迹。

mysql binlog介绍

首先确认数据库是否开启了binlog

mysql -u username -p
SHOW VARIABLES LIKE 'log_bin';

该命令将显示MySQL是否启用了二进制日志,以及日志文件的名称。如果输出结果中的Value为ON,则表示MySQL已经启用了二进制日志。如果Value为OFF,则表示MySQL没有启用二进制日志。

如果需要启用或禁用二进制日志,可以使用以下命令:

  • 启用二进制日志:
SET GLOBAL log_bin = ON;
  • 禁用二进制日志:
SET GLOBAL log_bin = OFF;

通过时间范围查找sql历史记录

mysqlbinlog --base64-output=decode-rows -vv  --start-datetime='2023-04-04 14:00:00' --stop-datetime='2023-04-04 15:00:00'   /home/mysql/logs/mysql-bin.000043 > /tmp/sql_record.txt

过滤表名、字段等关键字定位sql

grep config_json /tmp/sql_record.txt
ALTER TABLE `t_config` DROP COLUMN `config_json`
ALTER TABLE `t_config` ADD `config_json` text NOT NULL

至此真相已经出来!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL动态SQL拼接实例详解

    MySQL动态SQL拼接实例详解

    动态SQL呢?首先是SQL语句,是根据条件来拼接SQL,下面这篇文章主要给大家介绍了关于MySQL动态SQL拼接的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • MySQL 缓存机制与架构解析(最新推荐)

    MySQL 缓存机制与架构解析(最新推荐)

    本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDB Buffer Pool)和二级缓存(Query Cache),文章还探讨了SQL查询执行全流程,并分析了MySQL 8.0移除查询缓存的原因,最后,提出了应用层缓存和InnoDB缓冲池优化的建议,感兴趣的朋友跟随小编一起看看吧
    2025-02-02
  • MYSQL之Doublewrite Buffer双写缓存区详解

    MYSQL之Doublewrite Buffer双写缓存区详解

    由于MySQL页(16KB)与Linux文件系统页(4KB)不匹配,可能导致部分页写入损坏,Redo日志无法修复,Doublewrite Buffer通过内存+磁盘双缓冲确保数据可靠性,与Redo日志协作实现故障恢复,相关参数用于配置
    2025-08-08
  • ERROR 1222 (21000): The used SELECT statements have a different number of columns

    ERROR 1222 (21000): The used SELECT statements have a differ

    mysql 提示SQL-ERROR summary different number of columns
    2011-07-07
  • MySQL排序优化详细解析

    MySQL排序优化详细解析

    这篇文章主要介绍了MySQL排序优化详细解析,MySQL有两种方式生成有序的结果:1.通过排序操作;2.按索引顺序扫描,如果EXPLAIN出来的type列的值为"index",则说明使用了索引扫描来做排序,需要的朋友可以参考下
    2024-01-01
  • mysql中的delete,drop和truncate有什么区别

    mysql中的delete,drop和truncate有什么区别

    这篇文章主要介绍了mysql中的delete,drop和truncate有什么区别,三者的用法和使用场景又完全不同,接下来我们来看看具体的区别吧,希望对你的学习有所帮助
    2022-06-06
  • MySQL中的锁机制详解之全局锁,表级锁,行级锁

    MySQL中的锁机制详解之全局锁,表级锁,行级锁

    MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并发事务控制,本文给大家介绍MySQL之锁机制详解:全局锁,表级锁,行级锁,感兴趣的朋友一起看看吧
    2025-06-06
  • 分享MySQL 主从延迟与读写分离的七种解决方案

    分享MySQL 主从延迟与读写分离的七种解决方案

    这篇文章主要介绍了分享MySQL 主从延迟与读写分离的七种解决方案,常见的解决方式是分库分表,每次读写都是操作主库的一个分表,从库只用来做数据备份。当主库发生故障时,主从切换,保证集群的高可用性,下面详细的相关资料介绍,需要的小伙伴可以参考一下
    2022-03-03
  • MAC下MySQL初始密码忘记怎么办

    MAC下MySQL初始密码忘记怎么办

    MySQL初始密码忘记如何解决,这篇文章主要介绍了MAC下MySQL忘记初始密码的解决办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • MySQL使用navicat premium 15导出数据为批量插入格式实现方式

    MySQL使用navicat premium 15导出数据为批量插入格式实现方式

    本文介绍了使用Navicat进行数据传输的简要步骤,包括选择数据传输工具、设置文件保存路径、勾选“使用扩展插入语句”选项、依次点击下一步直至传输完成
    2025-10-10

最新评论