MySQL 5.6 新参数对binlog日志量的优化
数据库版本: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情况如下:
--建表语句
CREATE TABLE `pk_test`(
`id` bigint(20) NOT NULL,
`username` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into pk_test values (1,2);
insert into pk_test values (2,2);
commit;
show master statusG;--记录binlog文件和pos
deletefrom pk_test where id =1;
update pk_test set username='3';
commit;
mysqlbinlog --no-defaults -v --start-position=637945822/mysqllog/3307/binlog/mysql-bin.000001| more
### DELETE FROM `baofeng`.`pk_test`
### WHERE
### @1=1
### @2='2'
.....
### UPDATE `baofeng`.`pk_test`
### WHERE
### @1=2
### @2='2'
### SET
### @1=2
### @2='3'
从上面我们可以看到,在默认为FULL的binlog_row_image下,无论表有没有主键、唯一索引,全部按照全表字段作为条件,且update会更新全部字段。
binlog_row_image=minimal的情况下:
--建表语句
CREATE TABLE `ui_test`(
`id` bigint(20) NOT NULL,
`username` varchar(30) NOT NULL,
UNIQUE (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `ui_test_null`(
`id` bigint(20),
`username` varchar(30) NOT NULL,
UNIQUE key (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `null_test`(
`id` bigint(20),
`username` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into pk_test values (1,2);
insert into ui_test values (1,2);
insert into ui_test_null values (1,2);
insert into null_test values (1,2);
commit;
update pk_test set username='4';
deletefrom pk_test;
deletefrom ui_test;
deletefrom ui_test_null;
update null_test set username='4';
deletefrom null_test;
### UPDATE `baofeng`.`pk_test`
### WHERE
### @1=1
### SET
### @2='4'
....
### DELETE FROM `baofeng`.`pk_test`
### WHERE
### @1=1
.....
### DELETE FROM `baofeng`.`ui_test`
### WHERE
### @1=1
.....
### DELETE FROM `baofeng`.`ui_test_null`
### WHERE
### @1=1
### @2='2'
.....
### UPDATE `baofeng`.`null_test`
### WHERE
### @1=1
### @2='2'
### SET
### @2='4'
.....
### DELETE FROM `baofeng`.`null_test`
### WHERE
### @1=1
### @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日志量的优化的更多相关文章
- MySQL的undo/redo日志和binlog日志,以及2PC
发现自己的知识点有点散,今天就把它们连接起来,好好总结一下. 一.undo log.redo log.binlog的定义和对比 定义和作用 所在架构层级 ...
- mysql主从复制问题之主从两端binlog日志不同步解决方案
主操作: 进入主的数据库查看状态: mysql> show master statusG; *************************** 1. row **************** ...
- mysql做了主从,删除binlog日志
在主服务器操作: 1.查看当前主从库是用哪个binlog日志在做组从 show master status show slave status 2.查看主库的binlog日志 show master ...
- Mysql数据库之Binlog日志使用总结
binlog二进制日志对于mysql数据库的重要性有多大,在此就不多说了.下面根据本人的日常操作经历,并结合网上参考资料,对binlog日志使用做一梳理: 一.binlog日志介绍1)什么是binlo ...
- 解说mysql之binlog日志以及利用binlog日志恢复数据
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
- Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...
- MySQL binlog日志操作详解
MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. bi ...
- (转)Mysql数据库之Binlog日志使用总结
使用mysqlbinlog提取二进制日志 原文:http://blog.csdn.net/leshami/article/details/41962243 MySQL binlog日志记录了MySQL ...
- 【转】Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
随机推荐
- SQLSERVER自动定时(手动)备份工具
最近项目需要,写了一个小工具软件: 1.实时显示监控 2.可多选择备份数据库 3.按每天定时备份 4.备份文件自动压缩 5.删除之前备份文件 直接上图 1.备份监控界面: 2.数据库设置: 附工具下载 ...
- android 获取应用的当前版本号&获取当前android系统的版本号
(转自:http://www.cnblogs.com/qsl568/archive/2012/03/14/2395636.html) 获取当前应用的版本号: private String getVer ...
- CentOS 6.3下Samba服务器的安装与配置
一.简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的 ...
- 网格弹簧质点系统模拟(Spring-Mass System by Fast Method)附源码
弹簧质点模型的求解方法包括显式欧拉积分和隐式欧拉积分等方法,其中显式欧拉积分求解快速,但积分步长小,两个可视帧之间需要多次积分,而隐式欧拉积分则需要求解线性方程组,但其稳定性好,能够取较大的积分步长. ...
- Vijos1006P1006晴天小猪历险记之Hill[最短路]
P1006晴天小猪历险记之Hill Accepted 标签:晴天小猪历险记[显示标签] 背景 在很久很久以前,有一个动物村庄,那里是猪的乐园(^_^),村民们勤劳.勇敢.善良.团结……不过有一 ...
- [No000078]Python3 字符串操作
#!/usr/bin/env python3 # -*- coding: utf-8 -*- '''Python 字符串操作 string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分 ...
- Dialog详解(包括进度条、PopupWindow、自定义view、自定义样式的对话框)
Dialog详解(包括进度条.PopupWindow.自定义view.自定义样式的对话框) Android中提供了多种对话框,在实际应用中我们可能会需要修改这些已有的对话框.本实例就是从实际出发, ...
- HTML错误码
1XX 信息性状态码 2XX 成功状态码 3XX 重定向状态码 4XX 客户端错误状态码 5XX 服务器错误状态码
- .Net的内置对象之一 Request
一.Request简介 Request对象是.net的内置对象之一,也是.net中常用的对象,用于获取客户端的信息,可以使用Request对象访问任何基于HTTP请求传递的所有信息.通过Request ...
- Linux Linux程序练习十九
题目:编写一个同步服务器模型 要求: )客户端A主机给服务器B主机发送报文, )B服务器主机收到报文以后同时分发给C1主机.C2主机: )C1主机和C2主机打印出客户端A的报文 bug总结:本来这道题 ...