如何查看二进制日志ROW模式下最原始的SQL语句

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
简介: 如何查看二进制日志ROW模式下最原始的SQL语句
如何查看二进制日志ROW模式下最原始的SQL语句

 MySQL的binlog的ROW模式解析
     在mysql5.6以后,对主从数据一致性要求变高了,statement格式逐渐不太适合业务的需求了,所以生产环境大家都采用了row模
  式,row模式是传输最底层的数据变化的insert的模块来进行主从数据的传输,那么在binlog里面就和普通的statement模式有何差
  别?能否看到最原始的sql语句呢?
1、准备录入数据
   ①create table test1(id int,name varchar(20),sex enum('man','woman'),address varchar(20),grade tinyint(2));

     ee2b5897fa05642e6935aaa9bcbdade79f77c226

   ②INSERT INTO test1 VALUES (0001,'tim','man','hebei','03'); 
     INSERT INTO test1 VALUES (0002,'scott','man','beijing','03');

     a49d0dfc517468373f6797b04c2e8b6c9e2505d8

2、Row模式binlog是乱码
   Row模式下面,binlog里面的ddl语句是正常显示的,但是dml是乱码
    /usr/bin/mysqlbinlog /var/lib/mysql/mysql-bin.000005

    9bbd8d49af47b2e7186ed7ec1c118ebd38f6877e
    0ed2acd124399b28cbe0e0bedca9191b4416f329
    6263cb984d619151e4f57c7f8584ebd0350015a8

3、通过--base64-output=decode-rows -v来查看dml语句
    /usr/bin/mysqlbinlog --base64-output=decode-rows -v /var/lib/mysql/mysql-bin.000005
    可以看到如下效果,不过都是最原始的dml块sql语句

    ef203839d044439b8890c2317eb8c4b342a7e863
    1fcc9abbd4c3916f360e3a4c0d3de23487f2b3c2
    
   PS:这时可以看到dml的insert语句,但是只看到了最终的insert块,而看不到原始的过来的insert语句,很多时候排查问题
   需要原始的insert语句而不是底层的insert块。

4、通过binlog_rows_query_log_events参数来查看最原始的insert sql
  ①先在线设置全局的binlog_rows_query_log_events参数,刷新日志:
     set binlog_rows_query_log_events=1;     
  ②然后刷新日志录入新的数据记录
     flush logs;
     INSERT INTO test1 VALUES(0003,'tiger','man','beijing','03');
  ③解析binlog,没有看到原始的insert语句

    3e3e36882f75b9d4c2b89e69f22352e5575d4dd7
   
  ④通过mysql的命令行查看最原始的insert sql语句
     show binlog events in 'mysql-bin.000007';
     
    bcb9f2399ee7159dc2cde493fa8b7bf8fc5afd80

5、试验总结
     基于以上的试验,可以得出在row模式下,可以通过mysqlbinlog --base64-output=decode-rows –v查看最底层的insert数据
 模块,也可以通过命令行show binlog events in 'mysql-bin.000216';来实时查看最原始的insertsql记录。

   我们可以在搭建数据库的时候,在启动参数文件my.cnf里面事先设置好,如下所示:
     # vim my.cnf
     [mysqld]
     binlog_format=row  # binlog 日志格式
     binlog_rows_query_log_events = 1  # 将原始的操作sql记录写入事件中
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
8月前
|
SQL Oracle 关系型数据库
MySQL的sql_mode模式说明及设置
MySQL的sql_mode模式说明及设置
1171 112
|
7月前
|
SQL 传感器 人工智能
生成更智能,调试更轻松,SLS SQL Copilot 焕新登场!
阿里云日志服务(SLS)推出智能分析助手 SLS SQL Copilot,融合 AI 技术与日志分析最佳实践,将自然语言转换为 SQL 查询,降低使用门槛,提升查询效率。其具备原生集成、智能语义理解与高效执行能力,助力用户快速洞察日志数据价值,实现智能化日志分析新体验。
472 1
|
7月前
|
SQL 传感器 人工智能
生成更智能,调试更轻松,SLS SQL Copilot 焕新登场!
本文是阿里云日志服务(SLS)首次对外系统性地揭秘 SLS SQL Copilot 背后的产品理念、架构设计与核心技术积淀。我们将带你深入了解,这一智能分析助手如何从用户真实需求出发,融合前沿 AI 能力与 SLS 十余年日志分析最佳实践,打造出面向未来的智能化日志分析体验。
638 53
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文探讨了日志管理中的常见反模式及其潜在问题,强调科学的日志管理策略对系统可观测性的重要性。文中分析了6种反模式:copy truncate轮转导致的日志丢失或重复、NAS/OSS存储引发的采集不一致、多进程写入造成的日志混乱、创建文件空洞释放空间的风险、频繁覆盖写带来的数据完整性问题,以及使用vim编辑日志文件导致的重复采集。针对这些问题,文章提供了最佳实践建议,如使用create模式轮转日志、本地磁盘存储、单线程追加写入等方法,以降低日志采集风险,提升系统可靠性。最后总结指出,遵循这些实践可显著提高故障排查效率和系统性能。
1731 21
|
10月前
|
存储 运维 开发工具
警惕日志采集失败的 6 大经典雷区:从本地管理反模式到 LoongCollector 标准实践
本文总结了日志管理中的六大反模式及优化建议,涵盖日志轮转、存储选择、并发写入等常见问题,帮助提升日志采集的完整性与系统可观测性,适用于运维及开发人员优化日志管理策略。
349 5
|
6月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
345 6
|
7月前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
221 6
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
1095 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
SQL 存储 缓存
高基数 GroupBy 在 SLS SQL 中的查询加速
本文详细介绍了SLS中的高基数GroupBy查询加速技术。
395 95