10bet网址
MySQL 8.0参考手册
相关文件10bet官方网站 下载本手册 从本手册中摘录

5.4.4.2设置二进制日志格式

您可以通过启动MySQL Server来显式选择二进制日志记录格式--binlog-format =类型。支持的值类型是:

  • 陈述导致日志记录基于语句。

  • 导致日志记录是基于行的。这是默认值。

  • 混合导致日志记录以使用混合格式。

设置二进制日志记录格式不会激活服务器的二进制日志记录。该设置仅在服务器上启用二进制记录时生效,这是一种情况log_bin.系统变量设置为。从MySQL 8.0,默认情况下启用二进制日志记录,只有在指定的情况下禁用--skip-log-bin或者- dis-log-bin启动时的选项。

日志记录格式也可以在运行时切换,但请注意,在此部分稍后讨论的情况下,您不能执行许多情况。设置全局价值binlog_format.系统变量指定在更改后连接的客户端的格式:

mysql> set global binlog_format ='语句';mysql> set global binlog_format ='行';MySQL> Set Global Binlog_Format ='混合';

单个客户端可以通过设置会话值来控制自己的语句的日志记录格式binlog_format.

mysql> set session binlog_format ='语句';mysql> set session binlog_format ='行';mysql> set session binlog_format ='混合';

改变全球binlog_format.值需要足以设置全局系统变量的权限。改变会话binlog_format.值需要足以设置受限制会话系统变量的权限。看第5.1.9.1节“系统变量权限”

客户端可能希望在每次会话上设置二进制日志记录的原因:

  • 对数据库进行许多小型更改可能希望使用基于行的日志记录的会话。

  • 执行匹配许多行中的更新的会话在哪里子句可能希望使用基于语句的日志记录,因为它更有效率来记录多个语句而不是许多行。

  • 某些语句需要在源上的大量执行时间,但导致只修改几行。因此,使用基于行的日志记录重复它们可能有益。

当您无法在运行时切换复制格式时,存在异常:

  • 复制格式无法从存储的函数或触发器中更改。

  • 如果是NDB.存储引擎已启用。

  • 如果会话已打开临时表,则会为会话更改复制格式(set @@ session.binlog_format.)。

  • 如果任何复制通道具有打开临时表,则无法在全局更改复制格式(set @@ global.binlog_format.或者设置@@ persist.binlog_format.)。

  • 如果当前正在运行任何复制通道应用程序线程,则无法在全局更改复制格式(set @@ global.binlog_format.或者设置@@ persist.binlog_format.)。

尝试在任何这些情况下切换复制格式(或尝试设置当前复制格式)导致错误。但是,您可以使用persist_only设置@@ persist_only.binlog_format.)要随时更改复制格式,因为此操作不会修改运行时全局系统变量值,并且仅在服务器重新启动后生效。

在存在任何临时表时,不建议在运行时在运行时切换复制格式,因为仅在使用基于语句的复制时才会记录临时表,而基于行的复制和混合复制,则不会记录。

在复制正在进行时切换复制格式也可能导致问题。每个MySQL服务器都可以自行设置,只有自己的二进制记录格式(真实是binlog_format.设置为全局或会话范围)。这意味着更改复制源服务器上的日志格式不会导致副本更改其日志记录格式以匹配。使用时陈述模式,这binlog_format.未复制系统变量。使用时混合或者日志记录模式,它被复制但副本忽略。

副本无法转换已收到的二进制日志条目记录格式到陈述格式用于其自己的二进制日志。因此,副本必须使用或者混合格式如果源代码。从源上更改二进制记录格式陈述或者混合虽然复制将与副本一起进行陈述格式可能导致复制失败,错误执行行事件时出错:'无法执行语句:由于语句以行格式和binlog_format =语句写入二进制日志。更改副本上的二进制记录格式到陈述源仍在使用时格式化混合或者格式也会导致相同类型的复制故障。要安全更改格式,必须停止复制并确保在源和副本上进行相同的更改。

如果您正在使用Innodb.表和交易隔离级别是阅读承诺或者阅读未提交,只能使用基于行的日志记录。这是可能的更改日志记录格式陈述,但在运行时这样做会非常迅速地对错误,因为Innodb.不能再执行插入。

使用二进制日志格式设置为,许多更改使用基于行的格式写入二进制日志。但是,一些更改仍然使用基于语句的格式。示例包括所有DDL(数据定义语言)语句,例如创建表改变表, 或者下拉表

当使用基于行的二进制记录时,binlog_row_event_max_size.系统变量及其相应的启动选项--binlog-row-event-max-size设置对行事件的最大大小的软限制。默认值为8192字节,并且只能在服务器启动时更改该值。在可能的情况下,存储在二进制日志中的行被分组为具有尺寸不超过此设置的值的事件。如果无法拆分事件,则可以超出最大大小。

--binlog-row-event-max-size选项适用于能够基于行的复制的服务器。行存储到二进制日志中,其中大小以字节为单位,不超过此选项的值。该值必须是256的倍数。默认值为8192。

警告

使用时基于语句的日志记录为了复制,如果语句设计的方式,则可以对源和副本上的数据变得不同,因为数据修改是这样的方式非法;也就是说,它留给了查询优化器。一般来说,即使在复制之外也不是一个很好的做法。有关此问题的详细说明,请参阅B.3.7节“MySQL中的已知问题”