MySQL mysqlbinlog解析出的SQL语句被注释是怎么回事

一网友反馈使用mysqlbinlog解析出的二进制日志中的内容中,有些SQL语句有#注释的情况,这个是怎么回事呢?我们通过实验来了解一下具体细节情况,如下所示,实验环境为5.6.20-enterprise-commercial-advanced-log

# whereis mysqlbinlog

mysqlbinlog: /usr/bin/mysqlbinlog /usr/share/man/man1/mysqlbinlog.1.gz

我们先在参数文件my.cnf里面设置binlog_format=ROW ,然后重启一下MySQL服务

mysql> show variables like 'binlog_format';+---------------+-------+| Variable_name | Value |+---------------+-------+| binlog_format | ROW   |+---------------+-------+1 row in set (0.00 sec)mysql> show master status;+----------------------+----------+--------------+------------------+-------------------+| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+----------------------+----------+--------------+------------------+-------------------+| DB-Server-bin.000005 |      512 |              |                  |                   |+----------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)mysql>mysql> drop table kkk;Query OK, 0 rows affected (0.01 sec)mysql> create table kkk (id int ,name varchar(32));Query OK, 0 rows affected (0.02 sec)mysql> insert into kkk-> select 100, 'name' union all-> select 200, 'kerry' union all-> select 300, 'k3';Query OK, 3 rows affected (0.02 sec)Records: 3  Duplicates: 0  Warnings: 0mysql>

默认情况下只能看到一些经过base-64编码的信息,如下所示:

[root@DB-Server ~]# /usr/bin/mysqlbinlog/data/mysql/DB-Server-bin.000005

use `MyDB`/*!*/;SET TIMESTAMP=1530288296/*!*/;DROP TABLE `kkk` /* generated by server *//*!*/;# at 628#180629 12:05:14 server id 1  end_log_pos 745 CRC32 0xc6037a3f  Query   thread_id=3     exec_time=0     error_code=0SET TIMESTAMP=1530288314/*!*/;create table kkk (id int ,name varchar(32))/*!*/;# at 745#180629 12:06:07 server id 1  end_log_pos 817 CRC32 0x74fd4efb  Query   thread_id=3     exec_time=0     error_code=0SET TIMESTAMP=1530288367/*!*/;BEGIN/*!*/;# at 817#180629 12:06:07 server id 1  end_log_pos 866 CRC32 0xfb1391dd  Table_map: `MyDB`.`kkk` mapped to number 73# at 866#180629 12:06:07 server id 1  end_log_pos 930 CRC32 0xecb4e812  Write_rows: table id 73 flags: STMT_END_FBINLOG '71g2WxMBAAAAMQAAAGIDAAAAAEkAAAAAAAEABE15REIAA2trawACAw8CYAAD3ZET+w==71g2Wx4BAAAAQAAAAKIDAAAAAEkAAAAAAAEAAgAC//xkAAAABG5hbWX8yAAAAAVrZXJyefwsAQAAAmszEui07A=='/*!*/;# at 930#180629 12:06:07 server id 1  end_log_pos 961 CRC32 0x7ca988e3  Xid = 37COMMIT/*!*/;DELIMITER ;# End of log fileROLLBACK /* added by mysqlbinlog */;/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

mysqlbinlog有一个参数--verbose(或-v),将自动生成带注释的SQL语句(在行事件中重构伪SQL语句),其实这个并非原始SQL语句,而是伪SQL,如果使用这个参数两次(如-v -v),则输出列的描述信息,会生成字段的类型、长度、是否为null等属性信息:

-v, --verboseReconstruct pseudo-SQL statements out of row events. -v-v adds comments on column data types.

[root@DB-Server ~]# /usr/bin/mysqlbinlog -v /data/mysql/DB-Server-bin.000005

如上所示,其实这里的SQL语句不是原始SQL语句,那么能否看到原始SQL语句呢?答案是可以,但是必须设置系统变量binlog_rows_query_log_events

mysql> show variables like 'binlog_rows_query_log_events';+------------------------------+-------+| Variable_name                | Value |+------------------------------+-------+| binlog_rows_query_log_events | OFF   |+------------------------------+-------+1 row in set (0.00 sec)mysql> set binlog_rows_query_log_events=1;Query OK, 0 rows affected (0.00 sec)mysql> flush logs;Query OK, 0 rows affected (0.01 sec)mysql>  show master status;+----------------------+----------+--------------+------------------+-------------------+| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+----------------------+----------+--------------+------------------+-------------------+| DB-Server-bin.000026 |      120 |              |                  |                   |+----------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)mysql>mysql> insert into kkk select 600, 'k600';Query OK, 1 row affected (0.00 sec)Records: 1  Duplicates: 0  Warnings: 0

[root@DB-Server ~]# /usr/bin/mysqlbinlog--base64-output=DECODE-ROWS-v -v /data/mysql/DB-Server-bin.000026

在二进制日志格式为MIXED模式下,简单测试没有发现SQL被注释的情况,记录的都是原始的SQL语句。不清楚是否存在某些特殊情况也会出现这种情况。网友反馈腾讯云的MySQL在MIXED模式下,也会出现这种情况,不过没有使用过腾讯的MySQL,手头也没有测试环境,只能作罢!

mysql导出不带注释的sql语句_MySQL mysqlbinlog解析出的SQL语句被注释是怎么回事相关推荐

  1. mysql添加多字段语句_mysql添加多个字段sql语句

    1.mysql 怎么给一个表一次增加多个字段 一.添加字段的命令如下:alter table tableName add newColumn varchar(8) comment '新添加的字段' 1 ...

  2. mysql导出数据带表头

    #获取数据库表结构 select GROUP_CONCAT(column_name SEPARATOR ',') from information_schema.COLUMNS; 在服务器上导出 my ...

  3. mysql还原数据表的语句_MYSQL数据库常用备份及恢复语句

    备份MySQL数据库的命令,可以加选不同的参数选项来实现不同格式的要求. mysqldump -h主机 -u用户名 -p密码 数据库名 > 文件 备份MySQL数据库为带删除表的格式,能够让该备 ...

  4. mysql一些基本sql操作_MySql数据库的一些基本操作---------------SQL语法

    MySql数据库是比较常用的关系型数据库,操作用的是sql语句,下面来说一说MySql的一些基本操作 MySql数据库是一种C/S型的模式,即客户端/服务器端,对应到具体应用上,便是bin目录下的my ...

  5. mysql 动态sql 解析_MyBatis详解5.动态SQL

    字节跳动飞书内推! 北京.杭州.武汉.广州.深圳.上海,六大城市等你来投. 感兴趣的朋友可以私我咨询&内推,也可以通过链接直接投递! 海量HC,极速响应,快来和我成为同事吧. 今日头条.抖音. ...

  6. mysql数据库sql优化_MySQL 数据库性能优化之SQL优化

    注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础 优化目标 减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据 ...

  7. mysql命令行语句_MySql命令行命令和SQL语句

    一.常用mysql命令行命令 1.启动MYSQL服务 net start mysql 停止MYSQL服务 net stop mysql 2.netstat -na|findstr 3306 查看被监听 ...

  8. mysql执行语句_MySQL查看实时执行的SQL语句

    MySQL默认不能实时查看执行的SQL语句,因为这会消耗一定的资源. 要开启这个功能,稍微配置一下,打开这个LOG记录就可以了. 1 查看LOG功能 首先,查看是否已经开启实时SQL语句记录. mys ...

  9. mysql 黑名单_51ak带你看MYSQL5.7源码4:实现SQL黑名单功能

    博客迁移至: 从事DBA工作多年 MYSQL源码也是头一次接触 尝试记录下自己看MYSQL5.7源码的历程 申明:个人Python编程很溜,但是C++还停在白痴水平,源码理解方面有点弱,如发现有错误的 ...

最新文章

  1. 解决github push错误403 Forbidden while accessing
  2. 数据中心ups电源七个故障分析
  3. java什么是最终类型_golang和java,谁才是最终答案?
  4. 推荐:复旦邱锡鹏教授开源发布的《神经网络与深度学习》
  5. Java集合篇:HashMap 与 ConcurrentHashMap 原理总结
  6. python 实现点击右键用某个程序打开功能_4.PYTHON开发利器之使用VS Code进行python程序开发...
  7. debug LUW3 - callback workflow - ABAP工作流的调试(第三部分)
  8. Maven项目编译工具的使用
  9. codeforces 116A-C语言解题报告
  10. 【资源】福利来了!生物学相关常用软件小工具,百度云下载链接持续更新中...
  11. 二叉搜索树,和红黑树,
  12. congratulation的用法_congratulation用法详解
  13. Spark ML 构建回归模型
  14. 【Linux应用】Clonezilla使用指南
  15. 权变理论计算机管理理论,权变理论是什么意思?权变管理理论的介绍与应用
  16. 企业必须面对云计算时代
  17. 不同vlan实现互通
  18. STM32F103VET6——DAC双通道(PA4、PA5)输出不同电压值,串口可控电压输出的大小
  19. Android11以上版本使用高德定位,定位成功,卫星数一直为0
  20. 云诊所管理系统(联合诊疗)支持远程高清视频会诊

热门文章

  1. linux永久禁止进程,SELinux如何永久禁用 SELinux如何永久禁用
  2. 前端网页发布到nginx_通过nginx部署前端代码实现前后端分离
  3. 合作式智能运输系统 车用通信系统应用层及应用数据交互标准 第二阶段_为什么一定要了解OPC UA TSN——未来的工业通信标准...
  4. yolov3模型识别不出训练图片_技术实践丨基于MindSpore框架Yolov3-darknet模型的篮球动作检测体验...
  5. go语言学习相关资料
  6. python起简易http server
  7. perf 函数调用性能(函数流程图)
  8. live555编译:增加CMake支持
  9. 今天看到几款真不错的软件
  10. 机器学习面试题目整理