Binlog_row_image参数简介
binlog_row_image这个参数是MySQL5.6新增的参数,默认值是FULL,在5.7版本默认值也是FULL。
参数使用前提:binlog格式必须为row格式或者mixed格式,不可以是statement格式。
名词解释:
前镜像:数据库表中修改前的内容
后镜像:数据库表中修改后的内容
binlog_row_image参数可以设置三个合法值: FULL、MINIMAL、NOBLOB。
不同参数设置的实验
binlog_row_image为FULL
实验表有主键约束
create table `test1` ( `id` int(11) not null, `name` varchar(10) default null, primary key (`id`) );
Insert into test1 values(1,’jack’),(2,’mary’); |
解析binlog,查看记录镜像信息如下:
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -v /home/mysql/mysql-bin.000196 >/home/mysqlbin_1.txt |
从记录中可以看出,更新记录的前后镜像所有字段都记录了。
实验表无主键约束
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -v /home/mysql/mysql-bin.000197 >/home/mysqlbin_2.txt |
从记录中可以看出,更新记录的前后镜像所有字段都记录了。
Binlog_row_image为MINIMAL
实验表有主键约束
如果表有主键或唯一索引,前镜像只保留主键列,后镜像只保留修改列;
实验表无主键约束
如果表没有主键或唯一索引,前镜像全保留,后镜像只保留修改列;
Binlog_row_image为NOBLOB
实验表有主键约束,更新text/blob列
如果表有主键或唯一索引,修改列为text/blob列,前镜像忽略text/blob列,后镜像包含被修改的text/blob列;
实验表有主键约束,更新非text/blob列
如果表有主键或唯一索引,修改列不是text/blob列,前后镜像忽略text/blob列。
实验表无主键约束,更新text/blob列
如果表没有主键或唯一索引,修改列为text/blob列 ,前后镜像全保留;
实验表无主键约束,更新非text/blob列
如果表没有主键或唯一索引,修改列不是text/blob列,前镜像全保留,后镜像忽略text/blob列。
结论
- binlog_row_image为full时,表无论有没有主键约束或者唯一约束binlog都会记录所有前后镜像;
- binlog_row_image为minimal时,如果表有主键或唯一索引,前镜像只保留主键列,后镜像只保留修改列;如果表没有主键或唯一索引,前镜像全保留,后镜像只保留修改列;
- binlog_row_image为noblob时,如果表有主键或唯一索引,修改列为text/blob列,前镜像忽略text/blob列,后镜像包含被修改的text/blob列;如果表有主键或唯一索引,修改列不是text/blob列,前后镜像忽略text/blob列。如果表没有主键或唯一索引,修改列为text/blob列 ,前后镜像全保留;如果表没有主键或唯一索引,修改列不是text/blob列,前镜像全保留,后镜像忽略text/blob列。