阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL 5.7贴心参数之binlog_row_image

430次阅读
没有评论

共计 2957 个字符,预计需要花费 8 分钟才能阅读完成。

相信大家都了解 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 版本的其他功能都有人提到了,这个没人提到,我也简单的介绍一下,哈哈。

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='linuxidc';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>

解析 binlog 看看啥情况

[root@linuxidc 3306]# mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin.000010 | tail -n 20
#161210 11:02:32 server id 152  end_log_pos 2043 CRC32 0x3ce8a225       Update_rows: table id 110 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='linuxidc' /* 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='linuxidc' /* STRING(20) meta=65044 nullable=1 is_null=0 */
###   @4=99 /* INT meta=0 nullable=1 is_null=0 */
# at 2043
#161210 11:02:32 server id 152  end_log_pos 2074 CRC32 0x93619126       Xid = 49
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@linuxidc 3306]#

下面设置一下 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='linuxidc';  
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>

再解析 binlog 看看啥情况:

[root@linuxidc 3306]# mysqlbinlog --no-defaults -v -v --base64-output=DECODE-ROWS mysql-bin.000010 | tail -n 20
SET TIMESTAMP=1481339144/*!*/;
BEGIN
/*!*/;
# at 2211
#161210 11:05:44 server id 152  end_log_pos 2263 CRC32 0x57948074       Table_map: `test`.`t2` mapped to number 110
# at 2263
#161210 11:05:44 server id 152  end_log_pos 2309 CRC32 0x72114b1f       Update_rows: table id 110 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
#161210 11:05:44 server id 152  end_log_pos 2340 CRC32 0x23e45a71       Xid = 52
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@linuxidc 3306]#

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

总结:

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

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-12/138158.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2957字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7896862
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新 SSL 证书系统、申请 godaddy 的 APIKEY 公司之前花钱购买的 ssl 证书快...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
优雅、强大、轻量开源的多服务器监控神器

优雅、强大、轻量开源的多服务器监控神器

优雅、强大、轻量开源的多服务器监控神器 在多台服务器同时运行的环境中,性能监控、状态告警、资源可视化 是运维人...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...