广告
返回顶部
首页 > 资讯 > 数据库 >如何理解binlog的binlog_rows_query_log_events和binlog_row_image参数
  • 380
分享到

如何理解binlog的binlog_rows_query_log_events和binlog_row_image参数

2024-04-02 19:04:59 380人浏览 安东尼
摘要

这期内容当中小编将会给大家带来有关如何理解binlog的binlog_rows_query_log_events和binlog_row_image参数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇

这期内容当中小编将会给大家带来有关如何理解binlog的binlog_rows_query_log_events和binlog_row_image参数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。


Mysql 5.6.2 引入的两个参数binlog_rows_query_log_events和binlog_row_image

对于使用row格式的binlog,个人觉得很有用;

binlog_rows_query_log_events =1
    在row模式下..开启该参数,将把sql语句打印到binlog日志里面.默认是0(off);
   虽然将语句放入了binlog,但不会执行这个sql,就相当于注释一样.但对于dba来说,在查看binlog的时候,很有用处.
binlog_row_image='minimal'
   默认为full,在binlog为row格式下,full将记录update前后所有字段的值,minimal时,只记录更改字段的值和where字段的值,noblob时,记录除了blob和text的所有字段的值,如果update的blob或text字段,也只记录该字段更改后的值,更改前的不记录;

大家都知道row格式下的binlog增长速度太快,对存储空间,主从传输都是一个不小的压力.因为每个event记录了所有更改数据前后的值,不管数据是否有改动都会记录.binlog_row_image的引入就大大减少了binlog记录的数据.在结合binlog_rows_query_log_events,对于dba日常维护binlog是完全没有压力的,而且节省了硬盘空间开销,减小I/O,减少了主从传输压力;


下面通过举例说明:

下面就是一个事务在row格式下的binlog日志,红色部分就是binlog_rows_query_log_events后的效果;黄色部分就是binlog_row_image=full的结果,记录所有字段在更改前后的值;

# at 1134
#161118 17:25:49 server id 3310  end_log_pos 1199 CRC32 0x3D0190ce      GTID    last_committed=1        sequence_number=2
SET @@SESSioN.GTID_NEXT= '59194c6e-70db-11e6-b85b-5254002eb131:299';
# at 1199
#161118 17:25:49 server id 3310  end_log_pos 1270 CRC32 0x0bc5f8df      Query   thread_id=26    exec_time=0     error_code=0
SET TIMESTAMP=1479461149;
BEGIN
;
# at 1270
#161118 17:25:49 server id 3310  end_log_pos 1332 CRC32 0x7533bf59      Rows_query
# update t11 set col7 ='xxx' where id =2     ##############这一行就是启用了binlog_rows_query_log_events后的效果;
# at 1332
#161118 17:25:49 server id 3310  end_log_pos 1396 CRC32 0x75f09d77      Table_map: `tt1`.`t11` mapped to number 137
# at 1396
#161118 17:25:49 server id 3310  end_log_pos 1929 CRC32 0xa6eb390e      Update_rows: table id 137 flags: STMT_END_F
### UPDATE `tt1`.`t11`
### WHERE
###   @1=2
###   @2='xxx'
###   @3='bbbbbbbbbbbbbbbbbbbb'
###   @4='cccccccccccccccccccc'
###   @5='DDDddddddddddddddddd'
###   @6='eeeeeeeeeeeeeeeeeeee'
###   @7='ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'
###   @8='gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg'
### SET
###   @1=2
###   @2='xxx'
###   @3='bbbbbbbbbbbbbbbbbbbb'
###   @4='cccccccccccccccccccc'
###   @5='dddddddddddddddddddd'
###   @6='eeeeeeeeeeeeeeeeeeee'
###   @7='ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'
###   @8='xxx'
# at 1929
#161118 17:25:49 server id 3310  end_log_pos 1960 CRC32 0x9d147914      Xid = 551
COMMIT;


看下面的例子:黄色部分就是binlog_row_image='minimal' 的日志.只记录了更改后的值和where值.跟上面的例子一对比就发现减少了太多记录;

# at 1960
#161118 17:26:25 server id 3310  end_log_pos 2025 CRC32 0x20921004      GTID    last_committed=2        sequence_number=3
SET @@SESSION.GTID_NEXT= '59194c6e-70db-11e6-b85b-5254002eb131:300';
# at 2025
#161118 17:26:25 server id 3310  end_log_pos 2096 CRC32 0x0c129ffb      Query   thread_id=26    exec_time=0     error_code=0
SET TIMESTAMP=1479461185;
BEGIN
;
# at 2096
#161118 17:26:25 server id 3310  end_log_pos 2158 CRC32 0x6a5031d0      Rows_query
# update t11 set col1 ='xxx' where id =3
# at 2158
#161118 17:26:25 server id 3310  end_log_pos 2222 CRC32 0x34de716f      Table_map: `tt1`.`t11` mapped to number 137
# at 2222
#161118 17:26:25 server id 3310  end_log_pos 2268 CRC32 0x77563057      Update_rows: table id 137 flags: STMT_END_F
### UPDATE `tt1`.`t11`
### WHERE
###   @1=3
### SET
###   @2='xxx'
# at 2268
#161118 17:26:25 server id 3310  end_log_pos 2299 CRC32 0xe9b5eaa7      Xid = 555
COMMIT;


下面看看binlog_row_image=noblob时的情况,在noblob下,跟full唯一的区别是没有记录字段类型为text和blob的值,其他的都记录了.而且在例子中特意更改了@8(col7),这是一个text类型的字段,可以看到,在set前是没有记录整个字段的,只是记录该值set后的值;

# at 3691
#161118 17:27:01 server id 3310  end_log_pos 3756 CRC32 0x59fb0d65      GTID    last_committed=6        sequence_number=7
SET @@SESSION.GTID_NEXT= '59194c6e-70db-11e6-b85b-5254002eb131:304';
# at 3756
#161118 17:27:01 server id 3310  end_log_pos 3827 CRC32 0x9943381e      Query   thread_id=26    exec_time=0     error_code=0
SET TIMESTAMP=1479461221;
BEGIN
;
# at 3827
#161118 17:27:01 server id 3310  end_log_pos 3889 CRC32 0xa617db5e      Rows_query
# update t11 set col7 ='xxx' where id =4
# at 3889
#161118 17:27:01 server id 3310  end_log_pos 3953 CRC32 0x74e30167      Table_map: `tt1`.`t11` mapped to number 137
# at 3953
#161118 17:27:01 server id 3310  end_log_pos 4180 CRC32 0xd92fe8dc      Update_rows: table id 137 flags: STMT_END_F
### UPDATE `tt1`.`t11`
### WHERE
###   @1=4
###   @2='xxx'
###   @3='bbbbbbbbbbbbbbbbbbbb'
###   @4='cccccccccccccccccccc'
###   @5='dddddddddddddddddddd'
###   @6='eeeeeeeeeeeeeeeeeeee'
### SET
###   @1=4
###   @2='xxx'
###   @3='bbbbbbbbbbbbbbbbbbbb'
###   @4='cccccccccccccccccccc'
###   @5='dddddddddddddddddddd'
###   @6='eeeeeeeeeeeeeeeeeeee'
###   @8='xxx'
# at 4180
#161118 17:27:01 server id 3310  end_log_pos 4211 CRC32 0x87487ec8      Xid = 561
COMMIT;
# at 4211


对于delete效果也是一样的,就不一一举例了..

BEGIN
;
# at 4347
#161118 18:46:03 server id 3310  end_log_pos 4398 CRC32 0xd76dbd23      Rows_query
# delete from t11 where id =2
# at 4398
#161118 18:46:03 server id 3310  end_log_pos 4462 CRC32 0x75656a14      Table_map: `tt1`.`t11` mapped to number 137
# at 4462
#161118 18:46:03 server id 3310  end_log_pos 4590 CRC32 0xafec2072      Delete_rows: table id 137 flags: STMT_END_F
### DELETE FROM `tt1`.`t11`
### WHERE
###   @1=2
###   @2='xxx'
###   @3='bbbbbbbbbbbbbbbbbbbb'
###   @4='cccccccccccccccccccc'
###   @5='dddddddddddddddddddd'
###   @6='eeeeeeeeeeeeeeeeeeee'
# at 4590
#161118 18:46:03 server id 3310  end_log_pos 4621 CRC32 0x179ae194      Xid = 562
COMMIT;

上述就是小编为大家分享的如何理解binlog的binlog_rows_query_log_events和binlog_row_image参数了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 如何理解binlog的binlog_rows_query_log_events和binlog_row_image参数

本文链接: https://www.lsjlt.com/news/66400.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解binlog的binlog_rows_query_log_events和binlog_row_image参数
    这期内容当中小编将会给大家带来有关如何理解binlog的binlog_rows_query_log_events和binlog_row_image参数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇...
    99+
    2022-10-19
  • 如何理解MySQL中binlog和innodb_flush_log_at_trx_commit
    如何理解MySQL中binlog和innodb_flush_log_at_trx_commit ,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希...
    99+
    2022-10-19
  • 如何理解Shell函数参数
    这篇文章主要介绍“如何理解Shell函数参数”,在日常操作中,相信很多人在如何理解Shell函数参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Shell函数参数”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-09
  • 如何理解Oracle参数COMPATIBLE
    如何理解Oracle参数COMPATIBLE,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Oracle数据库中有个参数可共用的我们有时候会...
    99+
    2022-10-19
  • 如何理解impdp transform参数
    今天就跟大家聊聊有关如何理解impdp transform参数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 使用实例 impdp hr TAB...
    99+
    2022-10-19
  • 如何理解TestNG参数化
    本篇内容介绍了“如何理解TestNG参数化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一组参数化数据定义...
    99+
    2022-10-19
  • 如何理解/etc/sysctl.conf参数
    如何理解/etc/sysctl.conf参数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。linux:/etc/sysctl.conf 内核配置参数分析:htt...
    99+
    2023-06-06
  • 如何理解jQuery的效果参数
    这期内容当中小编将会给大家带来有关如何理解jQuery的效果参数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。jQuery 效果方法下表列出了用于创建动画效果的所有jQu...
    99+
    2022-10-19
  • 如何理解Linux内核参数overcommit_memory和OOM killer
    如何理解Linux内核参数overcommit_memory和OOM killer,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是Linux Overcommit和OOMo...
    99+
    2023-06-05
  • 如何理解VB.NET可选参数
    如何理解VB.NET可选参数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。VB.NET还是比较常用的,于是我研究了一下VB.NET可选参数,在这里拿出来和大家分享一下,希望...
    99+
    2023-06-17
  • 如何理解slave库写redo、binlog不实时丢数据的场景
    如何理解slave库写redo、binlog不实时丢数据的场景,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 1...
    99+
    2022-10-19
  • 如何理解GHOST参数及命令
    本篇内容主要讲解“如何理解GHOST参数及命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解GHOST参数及命令”吧!GHOST参数、命令操作指南 ghost所有的命令操作都是...
    99+
    2023-06-09
  • @PathVariable注解允许参数为空、不传参数如何处理
    @PathVariable注解允许参数为空、不传参数如何处理?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。说明设置可以不传:但是请求的时候,仍然提示projec...
    99+
    2023-06-06
  • Java形参和实参数量不一致如何解决
    Java中,形参和实参的数量不一致是不能直接解决的,因为Java的方法调用是严格按照形参和实参的数量和类型匹配的。 如果形参和实参的...
    99+
    2023-10-27
    Java
  • 如何理解Oracle表空间Offline的三种参数
    如何理解Oracle表空间Offline的三种参数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。归档模式下Temporary Offline操作 Of...
    99+
    2023-06-06
  • 如何进行处理Python对象参数的解析
    这期内容当中小编将会给大家带来有关如何进行处理Python对象参数的解析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在Python对象中使用C语言编写的扩展模块,必须将其编译成动态链接库的形式,通常使用...
    99+
    2023-06-17
  • 如何理解MySQL handler相关状态参数
    如何理解MySQL handler相关状态参数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。概述MySQL“自古以来”都有一个神秘的HANDL...
    99+
    2022-10-19
  • 如何利用MySQL的binlog恢复误删数据库详解
    目录1 查看当前数据库内容并备份数据库 2 开启bin_log功能 3 模拟误操作(插入3条数据,删除数据库) 4 数据恢复 5 总结 1 查看当前数据库内容并备份数据库 查看数据...
    99+
    2022-11-12
  • 如何理解MySQL 8.0中的全局参数持久化
    本篇内容介绍了“如何理解MySQL 8.0中的全局参数持久化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-18
  • 如何理解MySQL关于表名大小写的参数
    今天就跟大家聊聊有关如何理解MySQL关于表名大小写的参数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 查看现有的大小...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作