mysql binlog之二 三种格式的分析对比 - 一梦如是的博客 - CSDN博客
基础材料:
centos7.5 mysql 5.7.24 开启GTID
binlog对于mysql是至关重要的,binlog与undo redo一起保证了数据的完整性,用于数据恢复,崩溃恢复、任一时间点恢复、甚至是任意一条数据的恢复。所有的高可用模式也都是基于binlog进行处理的。
本文主要对binlog的三种存储格式statement、row、mixed进行分析对比其优缺点。
statement格式:
在statement格式下,binlog忠实的记录的执行过的语句,你执行过什么语句它就照搬复制到binlog中。由于其可能造成主从不一致的情况,所以生产环境基本都不会设置为statement。
优势:1、节省空间。由于只是对执行的语句进行记录,所以相比row模式binlog所占的空间很小
2、提高数据库性能。由于binlog是在事务提交时才进行fsync刷盘操作,而刷盘的操作是最耗费IO的,statement只需要记录一条语句而不是记录所有操作过的数据行。
劣势:可能造成主从不一致
在测试环境执行delete from test limit 10;删除表中的10条数据,观察binlog的内容变化,binlog部分内容如下:
可以看到执行过的语句被原原本本的记录到binlog中,被同步到从库重做。
执行delete from test limit 10;时还会产生一个警告,大意就是使用statement格式时执行limit语句可能造成主从同步不一致。因为limit语句只是指定了删除10条记录,但没有指定具体是哪10条,当mysql在两次执行时选择了不同的索引进行操作时,删除的记录就是不同的。当然还有其他函数也可能会造成主从不一致。
row格式:
在row格式下,binlog对于DDL操作记录执行的SQL语句,对于DML语句则记录具体操作的数据行。一般生产环境采用该格式。
优势:对于DML操作记录了具体的行数据,保证重放的一致性,同时也可以对一些误操作的数据进行单独恢复提供了可能性
劣势:由于记录了每条数据的内容变更,导致了binlog日志占用了很大的空间,由于fsync时一次写入数据过多,在一定程度上影响了性能。
调整binlog格式为row,执行delete from testxxxx limit 10;观察binlog的内容变化,binlog部分内容如下:
可见binlog修改的每一行数据的具体值都被记录了下来。如果我需要恢复其中的某一条记录只要把delete转换成insert就可以了,这是其他格式做不到的。
mixed格式:
集前两种格式的优点,对于DDL只对SQL语句进行记录。对DML操作则会进行判断,如果mysql判断会造成主从不一致,就会采用row格式记录,反之则用statement格式记录。
优点:节省空间,提高数据库性能,通过判断保证数据重放时的一致性。
缺点:无法对误操作数据进行单独恢复
调整binlog格式为mixed,执行delete from test limit 1;和delete from test where a =1;观察binlog的内容变化,binlog部分内容如下:
可见对于limit语句可能造成主从不一致的情况下,mysql选择了row格式进行记录,对于后面执行delete语句则采用了statement格式进行记录。
mysql binlog之二 三种格式的分析对比 - 一梦如是的博客 - CSDN博客相关推荐
- mysql binlog日志的三种模式
1.statement level模式 每一条会修改数据的sql都会记录到master的bin-log中.slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行. ...
- mysql binlog_format 三种格式 详解 ---摘抄
MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点. MySQL ...
- mysql binlog 权限_MySQL如何开启binlog?binlog三种模式的分析
前提,创建表t,并插入数据,语句如下: CREATE TABLE `t` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `t_modified` ...
- 假设指令字长为16位,操作数的地址码为6位,指令有零地址、一地址、二地址三种格式......
假设指令字长为16位,操作数的地址码为6位,指令有零地址.一地址.二地址三种格式. (1)设操作码固定,若零地址指令有M种,一地址指令有N种,则二地址指令最多有几种? (2)采用扩展操作码技术,二 ...
- MySQL提供了以下三种方法用于获取数据库对象的元数据
MySQL提供了以下三种方法用于获取数据库对象的元数据: 1)show语句 2)从INFORMATION_SCHEMA数据库里查询相关表 3)命令行程序,如mysqlshow, mysqldump 用 ...
- 正确修改MySQL最大连接数的三种好用方案
以下的文章主要介绍的是正确修改MySQL最大连接数的三种好用方案,我们大家都知道MySQL数据库在安装完之后,默认的MySQL数据库,其最大连接数为100,一般流量稍微大一点的论坛或网站这个连接数是远 ...
- 安卓版kindle电子书位置_安卓手机APP如何打开三种格式的电子书文件
首先登陆网站,在电脑端下载三种格式的<手把手教你玩脱口秀>,分别是epub ./mobi./pdf.格式. 一.epub.格式 1.在电脑端下载好后,直接把文件(电子书)发到手机上,在手机 ...
- Python数据处理(一):处理 JSON、XML、CSV 三种格式数据
Python 数据处理系列博客来啦! 本系列将以<Python数据处理>这本书为基础,以书中每章一篇博客的形式带大家一起学习 Python 数据处理.书中有些地方讲的不太详细,我会查阅其他 ...
- python操作数据库的几种方法_python对mysql数据库操作的三种不同方式
原标题:python对mysql数据库操作的三种不同方式 |转载自:博客园 |原文链接:http://www.cnblogs.com/mryrs/p/6951008.html 先要说一下,在这个暑期如 ...
最新文章
- wireshark数据包分析实战
- c++ array 模板类使用
- 一图读懂马云与阿里20年:互联网巨头是如何养成的?
- 贝叶斯分类器用于文本分类: Multinomial Naïve Bayes
- as3 的3Dwebgame引擎Dgame3D正式开源
- IE11浏览器清除cookie
- 银联标准之MAC算法实现(POS终端加密)
- SAP FICO 固定资产批导
- C. Odd/Even Increments
- 使用exe4j把jar转换成exe文件时,报错java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite
- python九宫格拼图_Python制作九宫格图片
- Shell语法----概论
- 配置赛门铁克(Symantec)https证书:从阿里云申请免费赛门铁克(Symantec)https证书并配置到cdn
- mysql表字段详解
- **关于电子海图(S-57 (ENC)转换shp 格式**
- Android卡顿分析中常见的log
- GPU高级调试与优化
- 求整数的位数及各位数字之和
- vim php tab 补全提示
- 基于微信小程序的订水送水系统设计与实现毕业设计毕设开题报告
热门文章
- Python练习_初识数据类型_day3
- 计算机毕业设计Java新城街道社区的健康档案管理平台(源码+系统+mysql数据库+lw文档
- Matlab 绘制双纵轴三纵轴图
- 微信公众号h5游戏核销流程
- 元柚话TK:海外抖音TikTok如何助力国货品牌出海呢?
- “威胁”员工全来上班后,马斯克“尴尬”了:车没地停、工位不够坐、Wi-Fi 还太差...
- 2021/1/10-每日三题第17弹:靓仔语塞,你知道 position 的值有哪些吗 ???
- svn failed to run the WC DB
- Tarjan算法求无向图割边割点、最近公共祖先的总结
- HTML中元素标签的分类及结构标签