1、statement level模式

每一条会修改数据的sql都会记录到master的bin-log中。slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行。
优点:statement level下的优点,首先就是解决了row level下的缺点,不需要记录每一行数据的变化,减少bin-log日志量,节约io,提高性能。因为他只需要记录在master上所执行的语句的细节,以及执行语句时候的上下文的信息。
缺点:由于它是记录的执行语句,所以为了让这些语句在slave端也能正确执行,那么他还必须记录每条语句在执行的时候的一些相关信息,也就是上下文信息,以保证所有语句在slave端被执行的时候能够得到和在master端执行时候相同的结果。另外就是,由于mysql现在发展比较快,很多的新功能加入,使mysql的复制遇到了不小的挑战,自然复制的时候涉及到越复杂的内容,bug也就越容易出现。在statement level下,目前已经发现的就有不少情况会造成mysql的复制问题,主要是修改数据的时候使用了某些特定的函数或者功能的时候会出现,比如sleep()在有些版本就不能正确复制。

2、rowlevel模式

日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改
优点:bin-log中可以不记录执行的sql语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样了。所以row level的日志的内容会非常清楚的记录下每一行数据修改的细节。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题。
缺点:row level下,所有的执行的语句当记录到日志中的时候,都将以每行记录的修改记录,这样可能会产生大量的日志内容,比如有这样一条update语句:update product set owner_member_id='d' where owner_member_id='a',执行之后,日志中记录的不是这条update语句所对应的事件(mysql是以事件的形式来记录bin-log日志),而是这条语句所更新的每一条记录的变化情况,这样就记录成很多条记录被更新的很多事件。自然,bin-log日志的量会很大。

3、mixed模式
实际上就是前两种模式的结合,在mixed模式下,mysql会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在statement和row之间选一种。新版本中的statement level还是和以前一样,仅仅记录执行的语句。而新版本的mysql中对row level模式被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录,如果sql语句确实就是update或者delete 等修改数据的语句,那么还是会记录所有行的变更。

调整binlog日志模式

mysql> show variables like '%binlog_format%';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)set global binlog_format = '?'原本是statement level,然后我改成了row level模式,然后切割一下binlog,接着对数据库进行一些操作,然后去最新的bin-log日志里面用下列语句查看内容
mysqlbinlog --base64-output=decode-rows -v mysql-bin.000016

  

转载于:https://www.cnblogs.com/bill2014/p/7255680.html

mysql binlog日志的三种模式相关推荐

  1. binlog日志的三种模式

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

  2. MySQL二进制日志的三种模式解析

    原文出自 http://www.abcdocker.com/abcdocker/213 Row Level 行模式 日志会记录每一行数据被修改的形式,然后在slave端再对相同的数据进行修改 优点:在 ...

  3. mysql主从同步的三种模式

    mysql 主从同步三种模式:异步复制.半同步复制.全同步复制 今天我们就来看下这三种同步模式的优势和劣势 异步复制 异步复制是mysql 默认的同步方式 在master为slave开通账号密码.ip ...

  4. mysql binlog之二 三种格式的分析对比 - 一梦如是的博客 - CSDN博客

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

  5. Mysql当前模式让不记录日志_MySQL日志binlog的三种模式

    1三种模式的介绍 二进制日志binlog作用: 1.以二进制形式记录更改数据库的SQL语句(insert,update,delete,create,drop,alter等) 2.用于Mysql主从复制 ...

  6. MySQL binlog日志三种模式选择及配置

    在认识binlog日志三种模式前,先了解一下解析binlog日志的命令工mysqlbinlog.mysqlbinlog工具的作用是解析mysql的二进制binlog日志内容,把二进制日志解析成可以在M ...

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

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

  8. MySQL binlog三种模式

    原文出自 http://www.abcdocker.com/abcdocker/213 MySQ binlog三种模式及设置方法 1.1 Row Level  行模式 日志中会记录每一行数据被修改的形 ...

  9. MySQL下bin-log的三种模式(ROW、Statement、Mixed)

    MySQL的bin-log日志备份有三种模式,分别是:ROW.Statement.Mixed 一.Row 基于行的复制(row-based replication,RBR) 日志中会记录成每一行数据被 ...

最新文章

  1. 最新TeamViewer绿色便携单文件版之新手使用说明
  2. 02软件需求读书笔记(二)
  3. Matlab中将数据保存为txt或dat格式四种方案
  4. 订餐系统之同步饿了么商家订单
  5. when is this.oModel in sap-ui-core.js initialized for navigation working
  6. 计算机病毒的防范(一)计算机病毒的分类
  7. 10年老兵给程序员的10条建议! 1
  8. node(基础)_node中的javascript
  9. 工程师与项目经理之间差距何在?
  10. 编译Android VNC Server(pc远程控制android)
  11. 指定的可执行文件不是此操作系统平台的有效应用程序_.NET Core 应用程序发布概述
  12. iptables conntrack有什么用
  13. IDEA常用快捷键总结(附导入其他IDE快捷键)
  14. MFC控件重叠显示问题
  15. 算法题:求一个数的三次方根
  16. 安卓调用科大讯飞语音
  17. 3个快速将Word转换成PDF的方法
  18. 跑通CHPDet模型
  19. Java面试题目分析
  20. 华为云弹性云服务器助力打造更安全可靠、灵活高效的云空间

热门文章

  1. 应云而生,幽灵的威胁 - 云原生应用交付与运维的思考
  2. 云原生生态周报 Vol. 16 | CNCF 归档 rkt,容器运行时“上古”之战老兵凋零
  3. 深入解析阿里 PouchContainer 如何实现容器原地升级
  4. 大学物理光学思维导图_思维导图走进新华百货现代物流
  5. 如何在graphpad表示出正负误差_GraphPad Prism 8.0绘制误差连线并填充颜色图
  6. linux怎么复制手册,程序员的Linux上手手册(2) - 基础文件操作命令
  7. 双目视觉焦距_双目视觉简介
  8. matlab fill 渐变,Matlab的渐变色填充(一)
  9. 【杂谈】言有三一门CSDN视频课赚160万?你想的太、太、太多了
  10. 【技术综述】有三AI不得不看的技术综述