版权声明:本文章为博主原创文章,未经博主允许不得转载,如有问题,欢迎留言交流指正 https://blog.csdn.net/finalkof1983/article/details/88418452

基础材料:

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博客相关推荐

  1. mysql binlog日志的三种模式

    1.statement level模式 每一条会修改数据的sql都会记录到master的bin-log中.slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行. ...

  2. mysql binlog_format 三种格式 详解 ---摘抄

    MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点. MySQL ...

  3. mysql binlog 权限_MySQL如何开启binlog?binlog三种模式的分析

    前提,创建表t,并插入数据,语句如下: CREATE TABLE `t` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `t_modified` ...

  4. 假设指令字长为16位,操作数的地址码为6位,指令有零地址、一地址、二地址三种格式......

    假设指令字长为16位,操作数的地址码为6位,指令有零地址.一地址.二地址三种格式.  (1)设操作码固定,若零地址指令有M种,一地址指令有N种,则二地址指令最多有几种?  (2)采用扩展操作码技术,二 ...

  5. MySQL提供了以下三种方法用于获取数据库对象的元数据

    MySQL提供了以下三种方法用于获取数据库对象的元数据: 1)show语句 2)从INFORMATION_SCHEMA数据库里查询相关表 3)命令行程序,如mysqlshow, mysqldump 用 ...

  6. 正确修改MySQL最大连接数的三种好用方案

    以下的文章主要介绍的是正确修改MySQL最大连接数的三种好用方案,我们大家都知道MySQL数据库在安装完之后,默认的MySQL数据库,其最大连接数为100,一般流量稍微大一点的论坛或网站这个连接数是远 ...

  7. 安卓版kindle电子书位置_安卓手机APP如何打开三种格式的电子书文件

    首先登陆网站,在电脑端下载三种格式的<手把手教你玩脱口秀>,分别是epub ./mobi./pdf.格式. 一.epub.格式 1.在电脑端下载好后,直接把文件(电子书)发到手机上,在手机 ...

  8. Python数据处理(一):处理 JSON、XML、CSV 三种格式数据

    Python 数据处理系列博客来啦! 本系列将以<Python数据处理>这本书为基础,以书中每章一篇博客的形式带大家一起学习 Python 数据处理.书中有些地方讲的不太详细,我会查阅其他 ...

  9. python操作数据库的几种方法_python对mysql数据库操作的三种不同方式

    原标题:python对mysql数据库操作的三种不同方式 |转载自:博客园 |原文链接:http://www.cnblogs.com/mryrs/p/6951008.html 先要说一下,在这个暑期如 ...

最新文章

  1. wireshark数据包分析实战
  2. c++ array 模板类使用
  3. 一图读懂马云与阿里20年:互联网巨头是如何养成的?
  4. 贝叶斯分类器用于文本分类: Multinomial Naïve Bayes
  5. as3 的3Dwebgame引擎Dgame3D正式开源
  6. IE11浏览器清除cookie
  7. 银联标准之MAC算法实现(POS终端加密)
  8. SAP FICO 固定资产批导
  9. C. Odd/Even Increments
  10. 使用exe4j把jar转换成exe文件时,报错java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite
  11. python九宫格拼图_Python制作九宫格图片
  12. Shell语法----概论
  13. 配置赛门铁克(Symantec)https证书:从阿里云申请免费赛门铁克(Symantec)https证书并配置到cdn
  14. mysql表字段详解
  15. **关于电子海图(S-57 (ENC)转换shp 格式**
  16. Android卡顿分析中常见的log
  17. GPU高级调试与优化
  18. 求整数的位数及各位数字之和
  19. vim php tab 补全提示
  20. 基于微信小程序的订水送水系统设计与实现毕业设计毕设开题报告

热门文章

  1. Python练习_初识数据类型_day3
  2. 计算机毕业设计Java新城街道社区的健康档案管理平台(源码+系统+mysql数据库+lw文档
  3. Matlab 绘制双纵轴三纵轴图
  4. 微信公众号h5游戏核销流程
  5. 元柚话TK:海外抖音TikTok如何助力国货品牌出海呢?
  6. “威胁”员工全来上班后,马斯克“尴尬”了:车没地停、工位不够坐、Wi-Fi 还太差...
  7. 2021/1/10-每日三题第17弹:靓仔语塞,你知道 position 的值有哪些吗 ???
  8. svn failed to run the WC DB
  9. Tarjan算法求无向图割边割点、最近公共祖先的总结
  10. HTML中元素标签的分类及结构标签