数据库版本:5.6.*

1.row日志image类型

参数binlog_row_image 控制着这种image类型,默认为FULL(log all columns),即记录before&after images。
该参数还有两种,minimal和noblob,minimal表示只记录after更改后的值,并且如果有主键或者非空唯一索引,则只以该字段作为where条件判断;noblob同full,只是不记录blob、text列。

2.binlog日志

对于insert则没有什么好说的,我们主要重点关注一下update和delete操作。

binlog_row_image=full的情况下,对于update和delete所有的表(包含带有主键、非空唯一索引,唯一索引,没有索引)产生的binlog均一致,binlog情况如下:

  1. --建表语句
  2. CREATE TABLE `pk_test`(
  3. `id` bigint(20) NOT NULL,
  4. `username` varchar(30) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  7. insert into pk_test values (1,2);
  8. insert into pk_test values (2,2);
  9. commit;
  10. show master statusG;--记录binlog文件和pos
  11. deletefrom pk_test where id =1;
  12. update pk_test set username='3';
  13. commit;
  14. mysqlbinlog --no-defaults -v --start-position=637945822/mysqllog/3307/binlog/mysql-bin.000001| more
  15. ### DELETE FROM `baofeng`.`pk_test`
  16. ### WHERE
  17. ### @1=1
  18. ### @2='2'
  19. .....
  20. ### UPDATE `baofeng`.`pk_test`
  21. ### WHERE
  22. ### @1=2
  23. ### @2='2'
  24. ### SET
  25. ### @1=2
  26. ### @2='3'

从上面我们可以看到,在默认为FULL的binlog_row_image下,无论表有没有主键、唯一索引,全部按照全表字段作为条件,且update会更新全部字段。

binlog_row_image=minimal的情况下:

  1. --建表语句
  2. CREATE TABLE `ui_test`(
  3. `id` bigint(20) NOT NULL,
  4. `username` varchar(30) NOT NULL,
  5. UNIQUE (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  7. CREATE TABLE `ui_test_null`(
  8. `id` bigint(20),
  9. `username` varchar(30) NOT NULL,
  10. UNIQUE key (`id`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  12. CREATE TABLE `null_test`(
  13. `id` bigint(20),
  14. `username` varchar(30) NOT NULL
  15. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  16. insert into pk_test values (1,2);
  17. insert into ui_test values (1,2);
  18. insert into ui_test_null values (1,2);
  19. insert into null_test values (1,2);
  20. commit;
  21. update pk_test set username='4';
  22. deletefrom pk_test;
  23. deletefrom ui_test;
  24. deletefrom ui_test_null;
  25. update null_test set username='4';
  26. deletefrom null_test;
  27. ### UPDATE `baofeng`.`pk_test`
  28. ### WHERE
  29. ### @1=1
  30. ### SET
  31. ### @2='4'
  32. ....
  33. ### DELETE FROM `baofeng`.`pk_test`
  34. ### WHERE
  35. ### @1=1
  36. .....
  37. ### DELETE FROM `baofeng`.`ui_test`
  38. ### WHERE
  39. ### @1=1
  40. .....
  41. ### DELETE FROM `baofeng`.`ui_test_null`
  42. ### WHERE
  43. ### @1=1
  44. ### @2='2'
  45. .....
  46. ### UPDATE `baofeng`.`null_test`
  47. ### WHERE
  48. ### @1=1
  49. ### @2='2'
  50. ### SET
  51. ### @2='4'
  52. .....
  53. ### DELETE FROM `baofeng`.`null_test`
  54. ### WHERE
  55. ### @1=1
  56. ### @2='2'

从上面的例子可以看到,当binlog_row_image=minimal的情况下,where条件只有主键或不为空的唯一索引,且只会更新被改变的字段。

3.总结:

在上面的测试我们可以看到,如果采用minimal格式,将减少主键和非空唯一索引表的before值,以及减少所有表update的after未被改变的值。
从效率上来说,减少了网络传输以及加快了update的效率。

参考资料:
https://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html#sysvar_binlog_row_image

MySQL 5.6 新参数对binlog日志量的优化的更多相关文章

  1. MySQL的undo/redo日志和binlog日志,以及2PC

    发现自己的知识点有点散,今天就把它们连接起来,好好总结一下. 一.undo log.redo log.binlog的定义和对比   定义和作用                       所在架构层级 ...

  2. mysql主从复制问题之主从两端binlog日志不同步解决方案

    主操作: 进入主的数据库查看状态: mysql> show master statusG; *************************** 1. row **************** ...

  3. mysql做了主从,删除binlog日志

    在主服务器操作: 1.查看当前主从库是用哪个binlog日志在做组从 show master status show  slave status 2.查看主库的binlog日志 show master ...

  4. Mysql数据库之Binlog日志使用总结

    binlog二进制日志对于mysql数据库的重要性有多大,在此就不多说了.下面根据本人的日常操作经历,并结合网上参考资料,对binlog日志使用做一梳理: 一.binlog日志介绍1)什么是binlo ...

  5. 解说mysql之binlog日志以及利用binlog日志恢复数据

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  6. Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...

  7. MySQL binlog日志操作详解

    MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. bi ...

  8. (转)Mysql数据库之Binlog日志使用总结

    使用mysqlbinlog提取二进制日志 原文:http://blog.csdn.net/leshami/article/details/41962243 MySQL binlog日志记录了MySQL ...

  9. 【转】Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

随机推荐

  1. MySQL(三)

    MYSQL(三) 上一章给大家说的是数据库的视图,存储过程等等操作,这章主要讲索引,以及索引注意事项,如果想看前面的文章,url如下: MYSQL入门全套(第一部) MYSQL入门全套(第二部) 索引 ...

  2. register_shutdown_function AND fastcgi_finish_request

    在php中又两个方法都是在请求快结束的时候执行.方法名分别是 register_shutdown_function和fastcgi_finish_request.虽然执行的时机差不多,但是功能和应用场 ...

  3. Oracle数据库穿越防火墙访问

    原因 Oracle listener 只起一个中介作用,当客户连接它时,它根据配置寻找到相应的数据库实例进程,然后spawned一个新的数据库连接,这个连接端口由listener传递给客户机,此后客户 ...

  4. eclipse下maven项目保持原有目录结构配置resin运行环境

    maven项目用起来很方便,但是它的目录结构和eclipse的目录结构是有区别的,故而在eclipse下的maven项目,直接运行调试是有一些问题的. 为了方便maven项目的运行调试,因而也就有了像 ...

  5. 识别 Linux上的设备(磁盘)类型

    1. Linux 上的设备 (device) Linux 操作系统中,各种设备驱动(device driver)通过设备控制器(device controller)来管理各种设备(device),其关 ...

  6. 转载文章----十步完全理解SQL

    转载地址:http://blog.jobbole.com/55086/ 很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程 ...

  7. intellij idea让资源文件自动更新

    intellij idea默认文件是自动保存的,但是手头有个项目jsp文件改动后,在tomcat中不能立即响应变化.要jsp文件改动后立刻看到变化,有个配置.在idea tomcat 中server的 ...

  8. down的另一种用法

  9. CWMP开源代码研究4——认证流程

    TR069 Http Digest 认证流程   一 流程及流程图 1.1盒端主动发起Http Digest认证流程  盒端CPE                                    ...

  10. ReactNative新手学习之路07ListView_ renderHeader使用StaticContainer

    react native新手学习之路07ListView_ renderHeader使用StaticContainer 1.某些特殊场景需要用ScrollView滚动和ListView配合但是不幸运的 ...