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 条评论
登录 后参与评论

相关文章

来自专栏猛牛哥的博客

CentOS系统安装ffmpeg的步骤

2284
来自专栏乐沙弥的世界

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

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

482
来自专栏数据和云

案发现场:被注入的软件及 ORA-600 16703 灾难的恢复

最近帮助一个客户恢复数据库,遇到了如下这个问题。让我们再一次惊醒于数据安全,如果不做好防范,问题总是会来得猝不及防。

1944
来自专栏乐沙弥的世界

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

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

812
来自专栏乐沙弥的世界

理解 using backup controlfile

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

993
来自专栏沃趣科技

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

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

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

11g Active DataGuard初探(r5笔记第54天)

原本dataguard中日志应用和数据库只读查询是一个互斥的关系,两者不能并存。如果需要应用日志,则数据库只能在Mount状态下 使用recover manag...

2957
来自专栏CSDN技术头条

MySQL 5.7 X Plugin:流水线技术vs.并行查询技术

本文将以MySQL 5.7 X Plugin为例,对比分析流水线(pipelining)和并行查询技术。 另一篇博文《MySQL 5.7 X Plugin支持异...

2836
来自专栏散尽浮华

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

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

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

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

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

3385

扫码关注云+社区