前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL中,一条语句是否会被binlog记录以及以什么样的模式记录

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

作者头像
MySQL轻松学
发布2018-03-09 14:54:25
2.3K0
发布2018-03-09 14:54:25
举报
文章被收录于专栏:MYSQL轻松学MYSQL轻松学

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() 函数;
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MYSQL轻松学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档