binlog_row_image参数修改测试

本文介绍了MySQL的binlog_row_image参数,包括其在row格式或mixed格式下的意义,以及MINIMAL、FULL两个设置的差异。通过场景测试展示了不同设置下binlog记录的内容,并建议使用binlog_row_image=FULL作为最安全的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

binlog_row_image参数修改实践

题外话

今天开发同事在测试环境用canal抽取数据时,遇到问题,度娘发现大概率是参数binlog_row_image的设置导致,于是做了相应的检查测试。

一、binlog_row_image参数解释

前提
binlog格式必须为row格式或者mixed格式,不可以是statement格式。
名称解释:
before image:前镜像,即数据库表中修改前的内容。
after image:后镜像,即数据库表中修改后的内容。

参数设置
binlog_row_image参数可以设置三个合法值: FULL、MINIMAL、NOBLOB

FULL: Log all columns in both the before image and the after image.
binlog日志记录所有前镜像和后镜像。

MINIMAL: Log only those columns in the before image that are required to identify the row to be changed; log only those columns in the after image where a value was specified by the SQL statement, or generated by auto-increment.
binlog日志的前镜像只记录唯一识别列(唯一索引列、主键列),后镜像只记录修改列。

NOBLOB: Log all columns (same as full), except for BLOB and TEXT columns that are not required to identify rows, or that have not changed.
binlog记录所有的列,就像full格式一样。但对于BLOB或TEXT格式的列,如果他不是唯一识别列(唯一索引列、主键列),或者没有修改,那就不记录。

分析
从以上参数解释可以很简单的看出binlog_row_image参数设置不同值的区别

binlog_row_image=FULL,binlog记录所有数据的前后镜像,是最安全的设置,但性能也是最低的,如果数据出现误操作,可以能通过flashback或binlog2sql等快速闪回工具恢复数据,如果对短时间前后数据安全性要求比较高,推荐此设置。

binlog_row_image=MINIMAL,binlog日志的前镜像只记录唯一识别列(唯一索引列、主键列),后镜像只记录修改列,性能是最高的,占用的资源等也是最少的,如果数据出现误操作,不能通过flashback或binlog2sql等快速闪回工具恢复数据。

binlog_row_image=NOBLOB,binlog记录所有的列,就像full格式一样。但对于BLOB或TEXT格式的列,如果他不是唯一识别列(唯一索引列、主键列),或者没有修改,那就不记录。此设置可以简单理解为在没有text和blob等大字段时,效果同FULL一样;在有text和blob等大字段时,如果大字段不是唯一识别列(唯一索引列、主键列),或者没有修改,那就不记录。

二、场景测试

(1)binlog_row_image=MINIMAL

set global binlog_row_image=‘MINIMAL’;
update一条数据:
在这里插入图片描述
binlog记录:
在这里插入图片描述
(2)binlog_row_image=FULL

set global binlog_row_image=‘FULL’;
update一条数据:
在这里插入图片描述
binlog记录:
在这里插入图片描述
在这里插入图片描述
PS:另一个设置NOBLOB,这里忽略。

注意insert和delete有一点区别,因为insert没有前镜像,delete没有后镜像,如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通过以上测试可以明显的看到各优缺点,个人还是推荐binlog_row_image=FULL,此设置为官方的默认设置,也是最安全的设置。

哎哟,不错噢! - - - - - - 欢迎指出有误的地方以及补充更好的方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值