相信大家都了解mysql binlog的格式,那就是有三种,分别是STATEMENT,MiXED,ROW。各有优劣,具体的请大家自行查阅资料。在MySQL 5.7版本以前,虽然ROW格式有各种各样的好处。

1. 比如加快从库重放日志;ROW直接调用mysql的存储引擎接口(handler API) 来执行行的插入、删除和更新,完全跳过了mysql的优化器的处理逻辑。

2. 保证主从数据的一致性。记录的每一行的变更。

3. 可以通过对binlog的逆向解析实现闪回功能。

那么实际上还是有一个缺陷,那就是由于记录的是每一行的变更,会带来磁盘IO上的开销,同时由于binlog日志变大,网络开销也变大了。那么在MySQL 5.7以后binlog的格式默认就是ROW了,同时引入了新的参数binlog_row_image,这个参数默认值是FULL,其还有一个值是minimal。由于5.7版本的其他功能都有人提到了,这个没人提到,我也简单的介绍一下,哈哈。(后面发现5.6就有该参数了,关注度不够,该死。。)

FULL记录每一行的变更,minimal只记录影响后的行。下面简单的测试一下大家就明白了。

mysql> show variables like '%row_im%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| binlog_row_image | FULL |
+------------------+-------+
1 row in set (0.01 sec) mysql> update t2 set uid=99 where name='yayundeng';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql>

解析binlog看看啥情况

[root@yayundeng ]# mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin. | tail -n
# :: server id end_log_pos CRC32 0x3ce8a225 Update_rows: table id flags: STMT_END_F
### UPDATE `test`.`t2`
### WHERE
### @
1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='gz' /* STRING(20) meta=65044 nullable=1 is_null=0 */
### @3='yayundeng' /* STRING(20) meta=65044 nullable=1 is_null=0 */
### @4=1 /* INT meta=0 nullable=1 is_null=0 */
### SET
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='gz' /* STRING(20) meta=65044 nullable=1 is_null=0 */
### @3='yayundeng' /* STRING(20) meta=65044 nullable=1 is_null=0 */
### @4=99 /* INT meta=0 nullable=1 is_null=0 */

# at
# :: server id end_log_pos CRC32 0x93619126 Xid =
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
[root@yayundeng ]#

下面设置一下binlog_row_image的值为minimal

mysql> set  binlog_row_image ='minimal';
Query OK, 0 rows affected (0.00 sec) mysql> update t2 set uid=100 where name='yayundeng';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql>

再解析binlog看看啥情况:

[root@yayundeng ]# mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin. | tail -n
SET TIMESTAMP=/*!*/;
BEGIN
/*!*/;
# at
# :: server id end_log_pos CRC32 0x57948074 Table_map: `test`.`t2` mapped to number
# at
# :: server id end_log_pos CRC32 0x72114b1f Update_rows: table id flags: STMT_END_F
### UPDATE `test`.`t2`
### WHERE
### @
1=1 /* INT meta=0 nullable=0 is_null=0 */
### SET
### @4=100 /* INT meta=0 nullable=1 is_null=0 */
# at 2309

# :: server id end_log_pos CRC32 0x23e45a71 Xid =
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
[root@yayundeng ]#

可以清楚的看到,当把binlog_row_image设置为minimal以后,binlog记录的就只是影响后的行,大赞。如此一来使用ROW格式一定是首选了,完全没必要使用STATEMENT,MiXED。不过现在也没有人使用STATEMENT了,所以准确的说就是完全没必要使用MiXED格式了。

总结:

MySQL 5.7是真正的一个里程碑的版本,比如可以在线调整bp pool,在线修改复制过滤,真正意义上多线程复制(5.6是基于库,5.7是基于表),支持bp pool预热,支持undo log回收,支持通用表空间,支持json,支持函数索引(通过虚拟列实现),支持只读事务等等等。

MySQL 5.7贴心参数之binlog_row_image的更多相关文章

  1. MySQL 5.7贴心参数之 log_timestamps

    写在前面 使用 MySQL 的过程中,经常会有人碰到这么一个问题,看错误日志.慢查询日志的时候,时间总是和本地时间对不上,差了 8 个小时,这样分析起来就相对麻烦了一些. 新改进 对于不知道是什么原因 ...

  2. paip.提升性能---mysql 性能 测试以及 参数调整.txt

    paip.提升性能---mysql 性能 测试以及 参数调整.txt 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://b ...

  3. 数据库相关文章转载(1) MySQL性能优化之参数配置

    1.目的: 通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能. 2.服务器参数: 32G内存.4个CPU,每个CPU 8核. 3.MySQL目 ...

  4. MySQL性能优化之参数配置

    1.目的: 通过根据服务器目前状况,修改Mysql的系统参数,达到合理利用服务器现有资源,最大合理的提高MySQL性能. 2.服务器参数: 32G内存.4个CPU,每个CPU 8核. 3.MySQL目 ...

  5. MySQL优化二 缓存参数优化

    数据库属于 IO密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优化数 ...

  6. MySQL中的sort_buffer_size参数大小的设置问题

    看到sort_buffer_size这个参数(connect级别的参数,MySQL5.7,默认值是1048576字节,也就是1MB)的默认值这么小,想着是不是可以调大一点,反正内存动不动几十个GB的, ...

  7. mysql命令行各个参数解释

    mysql命令行各个参数解释 http://blog.51yip.com/mysql/1056.html Usage: mysql [OPTIONS] [database]   //命令方式 -?, ...

  8. Mysql性能优化之参数配置(转)

    前言: Mysql作为数据库中广泛应用的开源产品,需要面对不同的生产压力,而有些性能问题通过配置优化就可以得到解决,优化可以分为几个方向:1.优化参数配置.2.优化数据库索引.3.优化数据库结构,如分 ...

  9. mysql配置优化的参数

    1.MySQL数据库高效优化解析  Mysql优化是一项非常重要的工作,而且是一项长期的工作,曾经有一个为位DBA前辈说过:mysql的优化,三分配置的优化,七分sql语句的优化. Mysql的优化: ...

随机推荐

  1. 【转】html、css、js文件加载顺序及执行情况

    原链接:http://www.cnblogs.com/Walker-lyl/p/5262075.html 今天看书,看到html,css,js加载执行情况,发现自己并不是真正的了解,网上搜了半小时依然 ...

  2. Hdu2544 最短路径 四种方法

    Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要 ...

  3. psql-02基本语法

    客户端 数据库: 创建:createdb mydb; 删除: dropdb mydb; 连接: 连接: psql mydb; 断开连接: \q 查看当前版本: select version(); 直接 ...

  4. no-jquery 05 Utilities

    Utilities type // is this a function? typeof someValue === 'function'; // is this an object? someVal ...

  5. express-14 发送邮件

    简介 Node和Express都没有内置的邮件发送功能,所以必须使用第三方模块.推荐Andris Reinman的Nodemailer SMTP.MSA和MTA 发送邮件的通用语言是简单邮件传输协议( ...

  6. CSS3-margin,padding,border

    margin  padding  border: 1.当属性值为0的时候,不需要在后面添加单位 2.当同时出现top margin以及bottom magin的时候,浏览器应用较大的哪一个 3.不能在 ...

  7. configSections

         由于最近一个项目的数据库变动比较频繁, 为了减少数据层的负担, 打算采用.net的MVC框架, 使用LINQ对付数据层.       这个框架的web.config文件里出现了configS ...

  8. [bzoj2118]墨墨的等式【dijk+堆】

    10/30的update:如果是冲着dijk的板子来的,建议看多校联考contest中第二场day2的T2,那边的写法比较优秀... --------------------------------- ...

  9. 使用递推解题:EOJ2999

    题目: Description 给定一个多项式 (ax+by)k,计算多项式展开后 xnym 项的系数. Input 第1行:一个整数T(1≤T≤10)为问题数. 接下来共T行.每行5个整数,分别为a ...

  10. 数据仓库原理<2>:数据仓库系统的体系结构

    1. 引言 本篇主要讲述数据仓库系统的体系结构与组成要素.数据集市与数据仓库之间的关系.元数据的定义与作用. 在上一篇,笔者介绍了数据仓库的定义: "数据仓库是一个面向主题的.集成的.不可更 ...