MySQL中,一条语句是否会被binlog记录以及以什么样的模式记录

Binlog官方

In MySQL 5.6, whether a statement is to be logged and thelogging mode to be used is determined according to the type of statement (safe,unsafe, or binary injected), the binary logging format (STATEMENT, ROW, orMIXED), and the logging capabilities of the storage engine (statement capable,row capable, both, or neither). (Binary injection refers to logging a changethat must be logged using ROW format.)

翻译

MySQL 5.6 中,一条语句是否会被binlog记录以及以什么样的模式记录,主要取决于语句的类型(safe,unsafe, or binary injected),binlog格式(STATEMENT, ROW, or MIXED)和 存储引擎对binlog_format 的支持能力(statement capable, row capable, both, or neither)。二进制形式记录必须使用row模式。

各种引擎对于binlog format的支持

下面的表格展示了各种引擎对于binlog format的支持:

  • 所以,如果transaction_isolation设置为 REPEATABLE-READ 或者SERIALIZABLE , Innodb的binlog_format可以是STATEMENT、ROW、MIXED中的任何一种;
  • 否则,无论Innodb的binlog_format 设置为STATEMENT、ROW、MIXED中的任何一种,实际记录的也只是ROW格式。
  • Innodb默认事务隔离级别是REPEATABLE-READ。
  • MySQL 5.6默认的binlog format是 STATEMENT。(注意MySQL != Innodb)
  • 当binlog_format采用ROW格式的时候,binlog事务会受到max_binlog_cache_size的限制(The maximumrecommended value is 4GB; this is due to the fact that MySQL currently cannotwork with binary log positions greater than 4GB.),可能导致语句执行失败,如全量更新一张大表。

哪些情况会记录成row模式

当binlog_format=MIXED的时候,如下情况下会自动将 binlog 的格式由 STATEMENT变为 ROW 模式:

  • 当函数中包含 UUID() 时;
  • 2 个及以上包含 AUTO_INCREMENT 字段的表被更新时;
  • 视图中的语句需要运用 row 格式时,创建这个视图的语句也会使用row格式;

例如建立视图时使用了 UUID() 函数;

  • 使用 UDF 时;
  • 在非事务性表上执行 INSERT DELAYED 语句时;
  • 如果一个session执行了一条row格式记录的语句,并且这个session还有未关闭的临时表,那么当前session的在此之后的所有语句都会继续使用row格式,直到所有临时表都被drop掉(临时表不能使用row格式记录);
  • 使用了 FOUND_ROWS()、 ROW_COUNT();
  • 使用了 USER()、CURRENT_USER()或者CURRENT_USER;
  • 当语句中调用了系统参数(system variables),有一些只在session级别调用了的参数可以排除在此情况外, 详见: http://dev.mysql.com/doc/refman/5.6/en/binary-log-mixed.html;
  • 调用了mysql库中的log型table;
  • 使用了 LOAD_FILE() 函数;

原文发布于微信公众号 - MYSQL轻松学(learnmysql)

原文发表时间:2016-12-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

实验二:SQL server 2005高可用性之----数据库镜像

如转载,请注明出处:http://blog.csdn.net/robinson_0612/archive/2009/11/04/4769060.aspx

1062
来自专栏沃趣科技

ASM 翻译系列第十八弹:ASM Internal ASM file number 5

原作者:Bane Radulovic 译者: 魏兴华 审核: 魏兴华 ASM file number 5 本章讲述ASM的5号文件,5号文件是ASM...

3536
来自专栏从零学习云计算

openshift/origin工作记录(1)——S2I镜像定制(基于SVN)

上周的工作内容是迁移微服务管控平台到openshift集群上。定制了基于git的S2I,走通了从gitlab拉取代码、打包、部署等一系列流程,成功迁移并向部门...

7911
来自专栏社区的朋友们

MySQL Online DDL

历史上看,MySQL 在 2007 年就完成了在线索引接口的设计。而 MySQL NDB Cluster、TokuDB 都早在 5.1 版本中就支持在线索引添加...

1.6K0
来自专栏杨建荣的学习笔记

关于Flashback的小测试(r10笔记第15天)

对于Oracle的Flashback来说,在11g里面有了一个很细微的变化,可以说是一个很不错的福利,那就是开启闪回不需要重启数据库至mount状态下,...

3374
来自专栏乐沙弥的世界

理解 using backup controlfile

        using backup controlfile 通常用于恢复由于当前控制文件丢失且原来备份的控制文件较当前发生变化的情形之下。using ba...

1033
来自专栏杨建荣的学习笔记

备库跳归档恢复的有趣案例(r9笔记第19天)

在Data Guard环境中,主备库基本都是使用归档来传递数据的变化。如果主备的归档传输中断,同时主库的归档被删除或者损坏,这种情况下备库是没法开始继续...

3415
来自专栏乐沙弥的世界

Oracle 基于用户管理恢复的处理

Oracle支持多种方式来管理数据文件的备份与恢复来保证数据库的可靠与完整。除了使用RMAN工具以及第三方备份与恢复工具之外,基于

532
来自专栏杨建荣的学习笔记

清理session的小插曲(r4笔记第95天)

前几天在做一次巡检的时候,通过top发现有3个进程占用的时间很长,之前也碰到过几次这种情况,但是排查发现是由于监控程序在运行,算是虚惊一场。 今天看到这些进程的...

3487
来自专栏散尽浮华

mysql下批量清空某个库下的所有表(库不要删除,保留空库)

总所周知,mysql下要想删除某个库下的某张表,只需要切换到该库下,执行语句"drop table tablename"即可删除!但若是该库下有成百上千张表,要...

1254

扫码关注云+社区