#### 17.1.6.4 二进制日志记录选项和变量

-   [与二进制日志记录一起使用的启动选项](replication-options-binary-log.html#replication-optvars-binlog)

-   [与二进制日志记录一起使用的系统变量](replication-options-binary-log.html#replication-sysvars-binlog)

    您可以使用[**mysqld**](mysqld.html)本节中描述的用于影响二进制日志的操作以及控制将哪些语句写入二进制日志的选项和系统变量。有关二进制日志的更多信息，请参阅[第 5.4.4 节，“二进制日志”](binary-log.html).有关使用 MySQL 服务器选项和系统变量的更多信息，请参阅[第 5.1.7 节，“服务器命令选项”](server-options.html)， 和[第 5.1.8 节，“服务器系统变量”](server-system-variables.html).

##### 与二进制日志记录一起使用的启动选项

以下列表描述了用于启用和配置二进制日志的启动选项。本节稍后将讨论与二进制日志记录一起使用的系统变量。

-   [](<>) [`--binlog-row-event-max-size=*`ñ`*`](replication-options-binary-log.html#option_mysqld_binlog-row-event-max-size)

    [](<>)[](<>)

    | 命令行格式 | `--binlog-row-event-max-size=#` |
    | ----- | ------------------------------- |
    | 系统变量 (≥ 8.0.14) | `[binlog_row_event_max_size]（复制选项二进制日志.html#sysvar_binlog_row_event_max_size）` |
    | 范围（≥8.0.14） | 全球的 |
    | 动态（≥ 8.0.14） | 不 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 (≥ 8.0.14) | 不 |
    | 类型 | 整数 |
    | 默认值 | `8192` |
    | 最小值 | `256` |
    | 最大值（64位平台） | `18446744073709551615` |
    | 最大值（32位平台） | `4294967295` |

    使用基于行的二进制日志记录时，此设置是对基于行的二进制日志事件的最大大小（以字节为单位）的软限制。在可能的情况下，二进制日志中存储的行被分组为大小不超过此设置值的事件。如果无法拆分事件，则可能会超过最大大小。该值必须是（或者四舍五入到）256的倍数。默认值为8192字节。

-   [](<>) [`--木箱[=*`基本名称`*]`](replication-options-binary-log.html#option_mysqld_log-bin)

    [](<>)[](<>)

    | 命令行格式 | `--log bin=文件名` |
    | ----- | --------------- |
    | 类型 | 文件名 |

    指定用于二进制日志文件的基名称。启用二进制日志记录后，服务器会将所有更改数据的语句记录到二进制日志中，用于备份和复制。二进制日志是一系列具有基本名称和数字扩展名的文件。这个`--木箱`选项值是日志序列的基本名称。服务器通过向基名称添加数字后缀，按顺序创建二进制日志文件。

    如果你不提供`--木箱`选项，MySQL使用`二进制日志`作为二进制日志文件的默认基名称。为了与早期版本兼容，如果您提供`--木箱`选项不带字符串或空字符串时，基名称默认为`*`主机名`*-垃圾箱`，使用主机的名称。

    二进制日志文件的默认位置是数据目录。你可以使用`--木箱`选项指定替代位置，方法是将前导绝对路径名添加到基名称以指定其他目录。当服务器从二进制日志索引文件中读取条目（该文件跟踪已使用的二进制日志文件）时，它会检查该条目是否包含相对路径。如果是，则使用`--木箱`选项二进制日志索引文件中记录的绝对路径保持不变；在这种情况下，必须手动编辑索引文件以启用新路径。二进制日志文件的基本名称和任何指定的路径都可以作为[`log_bin_basename`](replication-options-binary-log.html#sysvar_log_bin_basename)系统变量。

    在早期的MySQL版本中，默认情况下禁用二进制日志记录，如果指定`--木箱`选项在MySQL 8.0中，无论您是否指定`--木箱`选项例外情况是如果你使用[**mysqld**](mysqld.html)通过使用`--初始化`或`--初始化不安全`选项，默认情况下禁用二进制日志记录。在这种情况下，可以通过指定`--木箱`选项启用二进制日志记录时[`木箱`](replication-options-binary-log.html#sysvar_log_bin)显示服务器上二进制日志记录状态的系统变量设置为on。

    要禁用二进制日志记录，可以指定[`--跳过日志箱`](replication-options-binary-log.html#option_mysqld_log-bin)或[`--禁用日志箱`](replication-options-binary-log.html#option_mysqld_log-bin)启动时的选项。如果指定了其中一个选项，并且`--木箱`如果也指定了，则以后指定的选项优先。当禁用二进制日志记录时[`木箱`](replication-options-binary-log.html#sysvar_log_bin)系统变量设置为OFF。

    在服务器上使用GTID时，如果在异常关机后重新启动服务器时禁用二进制日志记录，则某些GTID可能会丢失，从而导致复制失败。在正常关机时，当前二进制日志文件中的GTID集保存在`mysql。gtid_已执行`桌子在未发生异常关机的情况下，在恢复期间，如果二进制日志记录仍处于启用状态，则会将GTID从二进制日志文件添加到表中。如果服务器重启时禁用了二进制日志记录，则服务器无法访问二进制日志文件来恢复GTID，因此无法启动复制。正常关机后，可以安全地禁用二进制日志记录。

    这个[`--日志从属更新`](replication-options-binary-log.html#sysvar_log_slave_updates)和[`--奴隶保护犯命令`](replication-options-replica.html#sysvar_slave_preserve_commit_order)选项需要二进制日志记录。如果禁用二进制日志记录，请忽略这些选项，或指定[`--日志从属更新=关闭`](replication-options-binary-log.html#sysvar_log_slave_updates)和[`--跳过从保存提交顺序`](replication-options-replica.html#sysvar_slave_preserve_commit_order).MySQL在默认情况下禁用这些选项[`--跳过日志箱`](replication-options-binary-log.html#option_mysqld_log-bin)或[`--禁用日志箱`](replication-options-binary-log.html#option_mysqld_log-bin)是指定的。如果你指定[`--日志从属更新`](replication-options-binary-log.html#sysvar_log_slave_updates)或[`--奴隶保护犯命令`](replication-options-replica.html#sysvar_slave_preserve_commit_order)连同[`--跳过日志箱`](replication-options-binary-log.html#option_mysqld_log-bin)或[`--禁用日志箱`](replication-options-binary-log.html#option_mysqld_log-bin)，则会发出警告或错误消息。

    在MySQL 5.7中，启用二进制日志记录时必须指定服务器ID，否则服务器将无法启动。在MySQL 8.0中[`服务器id`](replication-options.html#sysvar_server_id)系统变量默认设置为1。现在，当启用二进制日志记录时，可以使用此默认服务器ID启动服务器，但如果未通过设置[`服务器id`](replication-options.html#sysvar_server_id)系统变量。对于复制拓扑中使用的服务器，必须为每个服务器指定唯一的非零服务器ID。

    有关二进制日志格式和管理的信息，请参阅[第5.4.4节，“二进制日志”](binary-log.html).

-   [](<>) [`--日志箱索引[=*`文件名`*]`](replication-options-binary-log.html#option_mysqld_log-bin-index)

    [](<>)[](<>)

    | 命令行格式 | `--log bin index=文件名` |
    | ----- | --------------------- |
    | 系统变量 | `[log_bin_index]（复制选项binary log.html#sysvar_log_bin_index）` |
    | 范围 | 全球的 |
    | 动态 | 不 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 文件名 |

    二进制日志索引文件的名称，其中包含二进制日志文件的名称。默认情况下，它的位置和基名称与使用[`--木箱`](replication-options-binary-log.html#option_mysqld_log-bin)选项，加上扩展`指数`.如果你没有具体说明[`--木箱`](replication-options-binary-log.html#option_mysqld_log-bin)，默认的二进制日志索引文件名为`宾洛格。指数`.如果你指定[`--木箱`](replication-options-binary-log.html#option_mysqld_log-bin)选项，则默认的二进制日志索引文件名为`*`主机名`*-bin.index`, 使用主机名。

    有关二进制日志的格式和管理的信息，请参阅[第 5.4.4 节，“二进制日志”](binary-log.html).

**语句选择选项。**以下列表中的选项影响将哪些语句写入二进制日志，从而由复制源服务器发送到其副本。副本还有一些选项可以控制从源接收到的哪些语句应该被执行或忽略。有关详细信息，请参阅[第 17.1.6.3 节，“副本服务器选项和变量”](replication-options-replica.html).

-   [](<>) [`--binlog-do-db=*`数据库名称`*`](replication-options-binary-log.html#option_mysqld_binlog-do-db)

    [](<>)[](<>)

    | 命令行格式 | `--binlog-do-db=名称` |
    | ----- | ------------------- |
    | 类型 | 细绳 |

    此选项影响二进制日志记录的方式类似于[`--replicate-do-db`](replication-options-replica.html#option_mysqld_replicate-do-db)影响复制。

    此选项的效果取决于使用的是基于语句还是基于行的日志记录格式，与[`--replicate-do-db`](replication-options-replica.html#option_mysqld_replicate-do-db)取决于使用的是基于语句的复制还是基于行的复制。您应该记住，用于记录给定语句的格式不一定与值所指示的格式相同[`binlog_format`](replication-options-binary-log.html#sysvar_binlog_format).例如，DDL 语句如[`创建表`](create-table.html)和[`更改表`](alter-table.html)始终记录为语句，而不考虑有效的记录格式，因此以下基于语句的规则`--binlog-do-db`始终适用于确定语句是否被记录。

    **基于语句的日志记录。**只有那些语句被写入默认数据库（即由[`采用`](use.html)） 是*`数据库名称`*.要指定多个数据库，请多次使用此选项，每个数据库一次；但是，这样做确实*不是*导致跨数据库语句，例如`更新 *`some_db.some_table`* 设置 foo='bar'`在选择不同的数据库（或没有数据库）时进行记录。

    警告

    要指定多个数据库，您*必须*使用此选项的多个实例。因为数据库名称可以包含逗号，所以如果您提供逗号分隔的列表，则该列表将被视为单个数据库的名称。

    使用基于语句的日志记录时可能无法正常工作的示例：如果服务器以[`--binlog-do-db=销售`](replication-options-binary-log.html#option_mysqld_binlog-do-db)并且您发出以下声明，[`更新`](update.html)声明是*不是*记录：

    ```
    USE prices;
    UPDATE sales.january SET amount=amount+1000;
    ```

    这种“只检查默认数据库”行为的主要原因是，仅从语句很难知道它是否应该被复制（例如，如果您正在使用多表[`删除`](delete.html)语句或多表[`更新`](update.html)跨多个数据库的语句）。如果不需要，只检查默认数据库而不是所有数据库也更快。

    另一种可能不言自明的情况发生在复制给定数据库时，即使在设置选项时未指定它。如果服务器以`--binlog-do-db=销售`， 下列[`更新`](update.html)语句被记录，即使`价格`设置时不包括`--binlog-do-db`：

    ```
    USE sales;
    UPDATE prices.discounts SET percentage = percentage + 10;
    ```

    因为`销售量`是默认数据库时[`更新`](update.html)发表声明后，[`更新`](update.html)已记录。

    **基于行的日志记录。**日志记录仅限于数据库*`数据库名称`*.仅更改属于的表*`数据库名称`*被记录；默认数据库对此没有影响。假设服务器以[`--binlog-do-db=销售`](replication-options-binary-log.html#option_mysqld_binlog-do-db)并且基于行的日志记录生效，然后执行以下语句：

    ```
    USE prices;
    UPDATE sales.february SET amount=amount+100;
    ```

    的变化`二月`表中的`销售量`数据库记录按照[`更新`](update.html)陈述;无论是否发生这种情况[`采用`](use.html)发表了声明。但是，当使用基于行的日志记录格式和[`--binlog-do-db=销售`](replication-options-binary-log.html#option_mysqld_binlog-do-db)，由以下所做的更改[`更新`](update.html)未记录：

    ```
    USE prices;
    UPDATE prices.march SET amount=amount-25;
    ```

    即使`使用价格`声明改为`使用销售`， 这[`更新`](update.html)语句的效果仍然不会写入二进制日志。

    另一个重要的区别[`--binlog-do-db`](replication-options-binary-log.html#option_mysqld_binlog-do-db)与基于行的日志记录相反，基于语句的日志记录的处理发生在引用多个数据库的语句中。假设服务器以[`--binlog-do-db=db1`](replication-options-binary-log.html#option_mysqld_binlog-do-db)，并执行以下语句：

    ```
    USE db1;
    UPDATE db1.table1, db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;
    ```

    如果您使用基于语句的日志记录，则对两个表的更新都会写入二进制日志。但是，当使用基于行的格式时，只有更改为`表格1`被记录；`表2`位于不同的数据库中，因此不会被[`更新`](update.html).现在假设，而不是`使用 db1`声明，一个`使用 db4`已使用声明：

    ```
    USE db4;
    UPDATE db1.table1, db2.table2 SET db1.table1.col1 = 10, db2.table2.col2 = 20;
    ```

    在这种情况下，[`更新`](update.html)使用基于语句的日志记录时，语句不会写入二进制日志。但是，当使用基于行的日志记录时，更改为`表格1`已记录，但不是`表2`——换句话说，只更改数据库中的表[`--binlog-do-db`](replication-options-binary-log.html#option_mysqld_binlog-do-db)被记录，默认数据库的选择对此行为没有影响。

-   [](<>) [`--binlog-ignore-db=*`数据库名称`*`](replication-options-binary-log.html#option_mysqld_binlog-ignore-db)

    [](<>)[](<>)

    | 命令行格式 | `--binlog-ignore-db=名称` |
    | ----- | ----------------------- |
    | 类型 | 细绳 |

    此选项影响二进制日志记录的方式类似于[`--replicate-ignore-db`](replication-options-replica.html#option_mysqld_replicate-ignore-db)影响复制。

    此选项的效果取决于使用的是基于语句还是基于行的日志记录格式，与[`--replicate-ignore-db`](replication-options-replica.html#option_mysqld_replicate-ignore-db)取决于使用的是基于语句的复制还是基于行的复制。您应该记住，用于记录给定语句的格式不一定与值所指示的格式相同[`binlog_format`](replication-options-binary-log.html#sysvar_binlog_format).例如，DDL 语句如[`创建表`](create-table.html)和[`更改表`](alter-table.html)始终记录为语句，而不考虑有效的记录格式，因此以下基于语句的规则`--binlog-ignore-db`始终适用于确定语句是否被记录。

    **基于语句的日志记录。**告诉服务器不要记录默认数据库所在的任何语句（即，由[`采用`](use.html)） 是*`数据库名称`*.

    当没有默认数据库时，没有`--binlog-ignore-db`应用选项，并且始终记录此类语句。（错误 #11829838、错误 #60188）

    **基于行的格式。**告诉服务器不要记录对数据库中任何表的更新*`数据库名称`*.当前数据库无效。

    使用基于语句的日志记录时，以下示例无法正常工作。假设服务器以[`--binlog-ignore-db=销售`](replication-options-binary-log.html#option_mysqld_binlog-ignore-db)并且您发出以下声明：

    ```
    USE prices;
    UPDATE sales.january SET amount=amount+1000;
    ```

    这[`更新`](update.html)陈述*是*登录这种情况是因为[`--binlog-ignore-db`](replication-options-binary-log.html#option_mysqld_binlog-ignore-db)仅适用于默认数据库（由[`采用`](use.html)陈述）。因为`销售量`在语句中明确指定了数据库，则该语句未被过滤。但是，在使用基于行的日志记录时，[`更新`](update.html)声明的效果是*不是*写入二进制日志，这意味着没有更改`销售.一月`记录表；在这种情况下，[`--binlog-ignore-db=销售`](replication-options-binary-log.html#option_mysqld_binlog-ignore-db)原因*全部*对源副本中的表所做的更改`销售量`出于二进制日志记录目的而忽略的数据库。

    要指定多个要忽略的数据库，请多次使用此选项，每个数据库一次。因为数据库名称可以包含逗号，所以如果您提供逗号分隔的列表，则该列表将被视为单个数据库的名称。

    如果您正在使用跨数据库更新并且不希望记录这些更新，则不应使用此选项。

[](<>)**校验和选项。**MySQL 支持二进制日志校验和的读写。这些是使用此处列出的两个选项启用的：

-   [](<>) [`--binlog-checksum={无|CRC32}`](replication-options-binary-log.html#option_mysqld_binlog-checksum)

     [](<>)[](<>)

    | 命令行格式 | `--binlog-校验和=类型` |
    | ----- | ----------------- |
    | 类型 | 细绳 |
    | 默认值 | `CRC32` |
    | 有效值 | `没有`<br/><br/>`CRC32` |

    启用此选项会导致源为写入二进制日志的事件写入校验和。调成`没有`禁用，或用于生成校验和的算法的名称；目前，仅支持 CRC32 校验和，CRC32 为默认值。您不能在事务中更改此选项的设置。

    要控制副本读取校验和（来自中继日志），请使用[`--slave-sql-verify-校验和`](replication-options-replica.html#option_mysqld_slave-sql-verify-checksum)选项。

**测试和调试选项。**以下二进制日志选项用于复制测试和调试。它们不适用于正常操作。

-   [](<>) [`--max-binlog-dump-events=*`ñ`*`](replication-options-binary-log.html#option_mysqld_max-binlog-dump-events)

    [](<>)[](<>)

    | 命令行格式 | `--max-binlog-dump-events=#` |
    | ----- | ---------------------------- |
    | 类型 | 整数 |
    | 默认值 | `0` |

    MySQL 测试套件在内部使用此选项进行复制测试和调试。

-   [](<>) [`--soradic-binlog-dump-fail`](replication-options-binary-log.html#option_mysqld_sporadic-binlog-dump-fail)

    [](<>)[](<>)

    | 命令行格式 | `--sporadic-binlog-dump-fail[={OFF|ON}]` |
    | ----- | ---------------------------------------- |
    | 类型 | 布尔值 |
    | 默认值 | `离开` |

    MySQL 测试套件在内部使用此选项进行复制测试和调试。

##### 与二进制日志记录一起使用的系统变量

以下列表描述了用于控制二进制日志记录的系统变量。它们可以在服务器启动时设置，其中一些可以在运行时使用[`放`](set-variable.html).本节前面列出了用于控制二进制日志记录的服务器选项。

-   [](<>) [`binlog_cache_size`](replication-options-binary-log.html#sysvar_binlog_cache_size)

    [](<>)[](<>)

    | 命令行格式 | `--binlog-cache-size=#` |
    | ----- | ----------------------- |
    | 系统变量 | `[binlog_cache_size]（复制选项二进制日志.html#sysvar_binlog_cache_size）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `32768` |
    | 最小值 | `4096` |
    | 最大值（64位平台） | `18446744073709547520` |
    | 最大值（32位平台） | `4294963200` |
    | 块大小 | `4096` |

    在事务期间保存二进制日志更改的内存缓冲区大小。

    区块大小为4096。在存储系统变量的值之前，MySQL服务器会将不是块大小的精确倍数的值向下舍入到块大小的下一个较低倍数。解析器允许平台的最大无符号整数值（4294967295或2）<sup>32</sup>−1对于32位系统，18446744073709551615或2<sup>64</sup>−1（对于64位系统），但实际最大值比块大小小。

    在服务器上启用二进制日志记录时（使用[`木箱`](replication-options-binary-log.html#sysvar_log_bin)系统变量设置为ON），如果服务器支持任何事务性存储引擎，则会为每个客户端分配一个二进制日志缓存。如果事务的数据超过内存缓冲区中的空间，多余的数据将存储在临时文件中。当服务器上的二进制日志加密处于活动状态时，内存缓冲区不会加密，但是（从MySQL 8.0.17）用于保存二进制日志缓存的任何临时文件都会加密。提交每个事务后，通过清除内存缓冲区并截断临时文件（如果使用），重置二进制日志缓存。

    如果经常使用大型事务，可以通过减少或消除写入临时文件的需要来增加缓存大小以获得更好的性能。这个[`Binlog_缓存_使用`](server-status-variables.html#statvar_Binlog_cache_use)和[`Binlog_缓存_磁盘_使用`](server-status-variables.html#statvar_Binlog_cache_disk_use)状态变量可用于调整此变量的大小。看见[第5.4.4节，“二进制日志”](binary-log.html).

    `binlog_缓存_大小`仅设置事务缓存的大小；语句缓存的大小由[`binlog_stmt_缓存_大小`](replication-options-binary-log.html#sysvar_binlog_stmt_cache_size)系统变量。

-   [](<>) [`binlog_校验和`](replication-options-binary-log.html#sysvar_binlog_checksum)

    [](<>)[](<>)

    | 命令行格式 | `--binlog校验和=名称` |
    | ----- | ---------------- |
    | 系统变量 | `[binlog_checksum]（复制选项binary log.html#sysvar_binlog_checksum）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 一串 |
    | 默认值 | `CRC32` |
    | 有效值 | `没有一个`<br/><br/>`CRC32` |

    启用时，此变量会导致源为二进制日志中的每个事件写入校验和。`binlog_校验和`支持这些值`没有一个`（禁用校验和）和`CRC32`.默认值为`CRC32`什么时候`binlog_校验和`已禁用（值`没有一个`)，服务器通过写入和检查每个事件的事件长度（而不是校验和）来验证它是否只将完整的事件写入二进制日志。

    将源上的此变量设置为副本无法识别的值会导致副本设置自己的变量`binlog_校验和`重视`没有一个`，并在出现错误时停止复制。如果需要考虑与旧副本的向后兼容性，则可能需要将该值显式设置为`没有一个`.

    在MySQL 8.0.20之前（包括MySQL 8.0.20），组复制无法使用校验和，并且不支持它们出现在二进制日志中，因此必须设置[`binlog_校验和=无`](replication-options-binary-log.html#sysvar_binlog_checksum)将服务器实例配置为组成员时。在MySQL 8.0.21中，组复制支持校验和，因此组成员可以使用默认设置。

    改变`binlog_校验和`导致二进制日志旋转，因为必须为整个二进制日志文件写入校验和，而不能仅为其中一部分写入校验和。不能更改的值`binlog_校验和`在交易中。

    当使用[`binlog_事务_压缩`](replication-options-binary-log.html#sysvar_binlog_transaction_compression)系统变量，则不会为压缩事务负载中的单个事件写入校验和。相反，会为GTID事件编写一个校验和，并为压缩事件编写一个校验和`事务负载事件`.

-   [](<>) [`binlog_直接_非事务性_更新`](replication-options-binary-log.html#sysvar_binlog_direct_non_transactional_updates)

    [](<>)[](<>)

    | 命令行格式 | `--binlog直接非事务性更新[={OFF | ON}]` |
    | ----- | ------------------------------- |
    | 系统变量 | `[binlog_direct_non_transactional_updates]（复制选项binary log.html#sysvar_binlog_direct_non_transactional_updates）` |
    | 范围 | 全球会议 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `关` |

    由于并发性问题，当事务同时包含事务表和非事务表的更新时，副本可能会变得不一致。MySQL试图通过将非事务性语句写入事务缓存（提交时刷新）来保持这些语句之间的因果关系。但是，当代表事务对非事务表所做的修改对其他连接立即可见时，就会出现问题，因为这些更改可能不会立即写入二进制日志。

    这个[`binlog_直接_非事务性_更新`](replication-options-binary-log.html#sysvar_binlog_direct_non_transactional_updates)variable为解决这个问题提供了一种可能的解决方法。默认情况下，此变量处于禁用状态。有可能[`binlog_直接_非事务性_更新`](replication-options-binary-log.html#sysvar_binlog_direct_non_transactional_updates)导致对非事务表的更新直接写入二进制日志，而不是写入事务缓存。

    从MySQL 8.0.14开始，设置此系统变量的会话值是一项受限操作。会话用户必须具有足够的权限来设置受限会话变量。看见[第5.1.9.1节，“系统变量权限”](system-variable-privileges.html).

    *[`binlog_直接_非事务性_更新`](replication-options-binary-log.html#sysvar_binlog_direct_non_transactional_updates)仅适用于使用基于语句的二进制日志记录格式复制的语句*; 也就是说，只有当[`binlog_格式`](replication-options-binary-log.html#sysvar_binlog_format)是`陈述`，或者什么时候[`binlog_格式`](replication-options-binary-log.html#sysvar_binlog_format)是`混合的`并且使用基于语句的格式复制给定语句。当二进制日志格式为`一行`，或者什么时候[`binlog_格式`](replication-options-binary-log.html#sysvar_binlog_format)即将`混合的`并使用基于行的格式复制给定语句。

    重要的

    在启用此变量之前，必须确保事务表和非事务表之间没有依赖关系；这种依赖关系的一个例子是语句`插入myisam_表，从innodb_表中选择*`。否则，此类声明很可能会导致复制品与源偏离。

    当二进制日志格式为`一行`或`混合的`.

-   [](<>) [`binlog_加密`](replication-options-binary-log.html#sysvar_binlog_encryption)

    [](<>)[](<>)

    | 命令行格式 | `--binlog加密[={OFF | ON}]` |
    | ----- | ------------------------- |
    | 介绍 | 8.0.14 |
    | 系统变量 | `[binlog_encryption]（复制选项binary log.html#sysvar_binlog_encryption）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `关` |

    启用此服务器上二进制日志文件和中继日志文件的加密。`关`这是默认值。`在…上`为二进制日志文件和中继日志文件设置加密。不需要在服务器上启用二进制日志来启用加密，因此可以在没有二进制日志的复制副本上加密中继日志文件。要使用加密，必须安装并配置密钥环插件，以提供MySQL服务器的密钥环服务。有关执行此操作的说明，请参阅[第6.4.4节，“MySQL密钥环”](keyring.html).任何受支持的keyring插件都可以用来存储二进制日志加密密钥。

    首次在启用二进制日志加密的情况下启动服务器时，在初始化二进制日志和中继日志之前，会生成一个新的二进制日志加密密钥。此密钥用于加密每个二进制日志文件（如果服务器启用了二进制日志记录）和中继日志文件（如果服务器具有复制通道）的文件密码，并且从文件密码生成的其他密钥用于加密文件中的数据。对所有通道的中继日志文件进行加密，包括组复制应用程序通道和加密激活后创建的新通道。二进制日志索引文件和中继日志索引文件从不加密。

    如果在服务器运行时激活加密，则会在此时生成新的二进制日志加密密钥。例外情况是，如果加密之前在服务器上处于活动状态，然后被禁用，在这种情况下，以前使用的二进制日志加密密钥将再次使用。立即旋转二进制日志文件和中继日志文件，并使用此二进制日志加密密钥加密新文件和所有后续二进制日志文件和中继日志文件的文件密码。服务器上仍然存在的现有二进制日志文件和中继日志文件不会自动加密，但如果不再需要，可以清除它们。

    如果通过更改[`binlog_加密`](replication-options-binary-log.html#sysvar_binlog_encryption)系统变量为`关`，二进制日志文件和中继日志文件立即旋转，所有后续日志记录均未加密。以前加密的文件不会自动解密，但服务器仍然能够读取它们。这个`BINLOG_加密_管理`特权（或不推荐的[`超级的`](privileges-provided.html#priv_super)特权）在服务器运行时激活或停用加密。中继日志轮换请求中不包括组复制应用程序通道，因此这些通道的未加密日志记录在正常使用中轮换日志之前不会启动。

    有关二进制日志文件和中继日志文件加密的更多信息，请参阅[第17.3.2节，“加密二进制日志文件和中继日志文件”](replication-binlog-encryption.html).

-   [](<>) [`binlog_错误_操作`](replication-options-binary-log.html#sysvar_binlog_error_action)

    [](<>)[](<>)

    | 命令行格式 | `--binlog错误操作[=值]` |
    | ----- | ------------------ |
    | 系统变量 | `[binlog_error_action]（复制选项binary log.html#sysvar_binlog_error_action）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 列举 |
    | 默认值 | `中止服务器` |
    | 有效值 | `忽略错误`<br/><br/>`中止服务器` |

    控制服务器遇到错误时发生的情况，例如无法写入、刷新或同步二进制日志，这可能会导致源的二进制日志不一致，副本失去同步。

    此变量默认为`中止服务器`，这会使服务器在遇到二进制日志错误时停止日志记录并关闭。重新启动时，恢复过程与服务器意外停止时一样（请参阅[第17.4.2节，“处理副本意外停止”](replication-solutions-unexpected-replica-halt.html)).

    什么时候`binlog_错误_操作`即将`忽略错误`，如果服务器遇到此类错误，它将继续进行正在进行的事务，记录错误，然后停止记录，并继续执行更新。恢复二进制日志记录[`木箱`](replication-options-binary-log.html#sysvar_log_bin)必须再次启用，这需要重新启动服务器。此设置提供了与旧版本MySQL的向后兼容性。

-   [](<>) [`binlog_过期_日志_秒`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds)

    [](<>)[](<>)

    | 命令行格式 | `--binlog过期日志数秒=#` |
    | ----- | ------------------ |
    | 系统变量 | `[binlog_expire_logs_seconds]（复制选项binary log.html#sysvar_binlog_expire_logs_seconds）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `2592000` |
    | 最小值 | `0` |
    | 最大值 | `4294967295` |

    以秒为单位设置二进制日志过期时间。在其过期期限结束后，二进制日志文件可以自动删除。可能的删除发生在启动时以及二进制日志刷新时。日志刷新如中所示[第5.4节，“MySQL服务器日志”](server-logs.html).

    默认的二进制日志过期时间为2592000秒，相当于30天（30天）\*24\*60\*60秒）。如果两者都不存在，则默认值适用`binlog_过期_日志_秒`也不是弃用的系统变量[`过期_日志_天`](replication-options-binary-log.html#sysvar_expire_logs_days)在启动时设置了一个值。如果其中一个变量的值为非零值`binlog_过期_日志_秒`或`过期_日志_天`是在启动时设置的，该值用作二进制日志过期期。如果在启动时为这两个变量设置了非零值，则`binlog_过期_日志_秒`用作二进制日志过期期，以及`过期_日志_天`被忽略，并显示警告消息。

    在运行时，无法设置`binlog_过期_日志_秒`或`过期_日志_天`如果另一个当前设置为非零值，则设置为非零值。因为`binlog_过期_日志_秒`如果为非零，则必须显式设置`binlog_过期_日志_秒`在设置或更改`过期_日志_天`.

    从MySQL 8.0.29开始，可以通过设置[`binlog\u过期\u日志\u自动\u清除`](replication-options-binary-log.html#sysvar_binlog_expire_logs_auto_purge)系统变量为`关`。此设置优先于`binlog_过期_日志_秒`.

    在MySQL 8.0.28及更早版本中，要禁用二进制日志的自动清除，请为`binlog_过期_日志_秒`，并且不指定`过期_日志_天`。为了与早期版本兼容，如果为其显式指定值0，则也将禁用自动清除`过期_日志_天`并且不要为其指定值`binlog_过期_日志_秒`.在这种情况下，默认的`binlog_过期_日志_秒`不适用。

    要手动删除二进制日志文件，请使用[`清除二进制日志`](purge-binary-logs.html)陈述看见[第13.4.1.1节，“清除二进制日志语句”](purge-binary-logs.html).

-   [](<>) [`binlog\u过期\u日志\u自动\u清除`](replication-options-binary-log.html#sysvar_binlog_expire_logs_auto_purge)

    [](<>)[](<>)

    | 命令行格式 | `--binlog expire logs auto purge={ON | OFF}` |
    | ----- | -------------------------------------------- |
    | 介绍 | 8.0.29 |
    | 系统变量 | `[binlog_expire_logs_auto_purge]（复制选项binary log.html#sysvar_binlog_expire_logs_auto_purge）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `在…上` |

    启用或禁用二进制日志文件的自动清除。将此变量设置为`在…上`（默认）启用自动清除；设置为`关`禁用自动清除。

    此设置将覆盖用于控制二进制日志文件清除的任何其他变量或选项，例如[`binlog_过期_日志_秒`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds).尽管如此，即使`binlog\u过期\u日志\u自动\u清除`是`在…上`既有`binlog_过期_日志_秒`和[`过期_日志_天`](replication-options-binary-log.html#sysvar_expire_logs_days)开始`0`仍然会停止自动吹扫。

    此变量对[`清除二进制日志`](purge-binary-logs.html).

-   [](<>) [`binlog_格式`](replication-options-binary-log.html#sysvar_binlog_format)

    [](<>)[](<>)

    | 命令行格式 | `--binlog format=格式` |
    | ----- | -------------------- |
    | 系统变量 | `[binlog_格式]（复制选项binary log.html#sysvar_binlog_格式）` |
    | 范围 | 全球会议 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 列举 |
    | 默认值 | `一行` |
    | 有效值 | `混合的`<br/><br/>`陈述`<br/><br/>`一行` |

    此系统变量设置二进制日志记录格式，可以是以下任意一种：`陈述`, `一行`或`混合的`看见[第17.2.1节，“复制格式”](replication-formats.html)。该设置在服务器上启用二进制日志记录时生效，即[`木箱`](replication-options-binary-log.html#sysvar_log_bin)系统变量设置为`在…上`.在MySQL 8.0中，默认情况下启用二进制日志记录。

    [`binlog_格式`](replication-options-binary-log.html#sysvar_binlog_format)可以在启动或运行时设置，但在某些情况下，无法在运行时更改此变量，或导致复制失败，如下文所述。

    默认值是`一行`. *例外*：在NDB集群中，默认值为`混合的`; NDB群集不支持基于语句的复制。

    设置此系统变量的会话值是一项受限操作。会话用户必须具有足够的权限来设置受限会话变量。看见[第5.1.9.1节，“系统变量权限”](system-variable-privileges.html).

    控制此变量的更改何时生效以及影响持续多长时间的规则与其他MySQL服务器系统变量的规则相同。有关更多信息，请参阅[第13.7.6.1节，“设置变量赋值语法”](set-variable.html).

    什么时候`混合的`指定时，将使用基于语句的复制，但只有基于行的复制才能保证产生正确的结果的情况除外。例如，当语句包含可加载函数或[`UUID（）`](miscellaneous-functions.html#function_uuid)作用

    有关设置每个二进制日志格式时如何处理存储程序（存储过程和函数、触发器和事件）的详细信息，请参阅[第25.7节，“存储程序二进制记录”](stored-programs-logging.html).

    在运行时无法切换复制格式时会出现例外情况：

    -   不能在存储函数或触发器中更改复制格式。

    -   如果会话具有打开的临时表，则无法更改会话的复制格式(`设置@会话。binlog_格式`).

    -   如果任何复制通道都有打开的临时表，则无法全局更改复制格式(`设置@@GLOBAL。binlog_格式`或`设置@PERSIST。binlog_格式`).

    -   如果当前正在运行任何复制通道applier线程，则无法全局更改复制格式(`设置@@GLOBAL。binlog_格式`或`设置@PERSIST。binlog_格式`).

        在上述任何情况下尝试切换复制格式（或尝试设置当前复制格式）都会导致错误。但是，您可以使用`只有你` (`仅设置@@PERSIST\u。binlog_格式`)随时更改复制格式，因为此操作不会修改运行时全局系统变量值，并且仅在服务器重新启动后生效。

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

        更改复制源服务器上的日志记录格式不会导致复制副本更改其日志记录格式以匹配。如果复制副本启用了二进制日志记录，并且更改导致复制副本使用`陈述`源使用时格式化日志记录`一行`或`混合的`格式化日志记录。副本无法转换在中接收的二进制日志项`一行`记录格式为`陈述`在自己的二进制日志中使用的格式，因此这种情况可能会导致复制失败。有关更多信息，请参阅[第5.4.4.2节，“设置二进制日志格式”](binary-log-setting.html).

        二进制日志格式会影响以下服务器选项的行为：

    -   [`--复制do数据库`](replication-options-replica.html#option_mysqld_replicate-do-db)

    -   [`--复制忽略数据库`](replication-options-replica.html#option_mysqld_replicate-ignore-db)

    -   [`--binlog do db`](replication-options-binary-log.html#option_mysqld_binlog-do-db)

    -   [`--binlog忽略数据库`](replication-options-binary-log.html#option_mysqld_binlog-ignore-db)

        这些影响将在各个选项的描述中详细讨论。

-   [](<>) [`binlog\u组\u提交\u同步\u延迟`](replication-options-binary-log.html#sysvar_binlog_group_commit_sync_delay)

    [](<>)[](<>)

    | 命令行格式 | `--binlog组提交同步延迟=#` |
    | ----- | ------------------- |
    | 系统变量 | `[binlog_group_commit_sync_delay]（复制选项binary log.html#sysvar_binlog_group_commit_sync_delay）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `0` |
    | 最小值 | `0` |
    | 最大值 | `1000000` |

    控制二进制日志提交在将二进制日志文件同步到磁盘之前等待的微秒数。默认情况下[`binlog\u组\u提交\u同步\u延迟`](replication-options-binary-log.html#sysvar_binlog_group_commit_sync_delay)设置为0，表示没有延迟。背景[`binlog\u组\u提交\u同步\u延迟`](replication-options-binary-log.html#sysvar_binlog_group_commit_sync_delay)到微秒的延迟可以使更多事务同时同步到磁盘，从而减少提交一组事务的总时间，因为较大的组需要的时间单位较少。

    什么时候[`sync_binlog=0`](replication-options-binary-log.html#sysvar_sync_binlog)或[`sync_binlog=1`](replication-options-binary-log.html#sysvar_sync_binlog)已设置，由指定的延迟[`binlog\u组\u提交\u同步\u延迟`](replication-options-binary-log.html#sysvar_binlog_group_commit_sync_delay)在同步之前（或在[`sync_binlog=0`](replication-options-binary-log.html#sysvar_sync_binlog)，然后继续）。什么时候[`sync_binlog`](replication-options-binary-log.html#sysvar_sync_binlog)设置为一个值*n*大于1时，延迟将在每次*n*二进制日志提交组。

    背景[`binlog\u组\u提交\u同步\u延迟`](replication-options-binary-log.html#sysvar_binlog_group_commit_sync_delay)可以增加具有（或故障转移后可能具有）副本的任何服务器上的并行提交事务数，因此可以增加副本上的并行执行。要从这种效果中获益，副本服务器必须具有[`副本\并行\类型=逻辑\时钟`](replication-options-replica.html#sysvar_replica_parallel_type)（来自MySQL 8.0.26）或[`从并行时钟类型=逻辑时钟`](replication-options-replica.html#sysvar_slave_parallel_type)设置，并且当[`binlog_事务_依赖关系_跟踪=提交顺序`](replication-options-binary-log.html#sysvar_binlog_transaction_dependency_tracking)也设定了。在调整设置时，同时考虑源吞吐量和副本吞吐量非常重要[`binlog\u组\u提交\u同步\u延迟`](replication-options-binary-log.html#sysvar_binlog_group_commit_sync_delay).

    背景[`binlog\u组\u提交\u同步\u延迟`](replication-options-binary-log.html#sysvar_binlog_group_commit_sync_delay)还可以减少`fsync（）`调用任何具有二进制日志的服务器（源或副本）上的二进制日志。

    请注意，设置[`binlog\u组\u提交\u同步\u延迟`](replication-options-binary-log.html#sysvar_binlog_group_commit_sync_delay)增加服务器上事务的延迟，这可能会影响客户端应用程序。此外，在高度并发的工作负载上，延迟可能会增加争用，从而降低吞吐量。通常，设置延迟的好处大于缺点，但应始终进行调整以确定最佳设置。

-   [](<>) [`binlog\u组\u提交\u同步\u无延迟\u计数`](replication-options-binary-log.html#sysvar_binlog_group_commit_sync_no_delay_count)

    [](<>)[](<>)

    | 命令行格式 | `--binlog组提交同步无延迟计数=#` |
    | ----- | ---------------------- |
    | 系统变量 | `[binlog_group_commit_sync_no_delay_count]（复制选项binary log.html#sysvar_binlog_group_commit_sync_no_delay_count）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `0` |
    | 最小值 | `0` |
    | 最大值 | `100000` |

    终止当前延迟之前要等待的最大事务数，由指定[`binlog\u组\u提交\u同步\u延迟`](replication-options-binary-log.html#sysvar_binlog_group_commit_sync_delay)如果[`binlog\u组\u提交\u同步\u延迟`](replication-options-binary-log.html#sysvar_binlog_group_commit_sync_delay)设置为0，则此选项无效。

-   [](<>) [`binlog_max_flush_queue_time`](replication-options-binary-log.html#sysvar_binlog_max_flush_queue_time)

    [](<>)[](<>)

    | 命令行格式 | `--binlog最大刷新队列时间=#` |
    | ----- | -------------------- |
    | 反对 | 对 |
    | 系统变量 | `[binlog_max_flush_queue_time]（复制选项binary log.html#sysvar_binlog_max_flush_queue_time）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `0` |
    | 最小值 | `0` |
    | 最大值 | `100000` |

    `binlog_max_flush_queue_time`已弃用，并被标记为在未来的MySQL版本中最终删除。以前，该系统变量控制在继续进行组提交之前，继续从刷新队列读取事务的时间（以微秒为单位）。它不再有任何效果。

-   [](<>) [`binlog_order_提交`](replication-options-binary-log.html#sysvar_binlog_order_commits)

    [](<>)[](<>)

    | 命令行格式 | `--binlog命令提交[={OFF | ON}]` |
    | ----- | --------------------------- |
    | 系统变量 | `[binlog_order_committes]（复制选项binary log.html#sysvar_binlog_order_committes）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `在…上` |

    在复制源服务器（默认情况下）上启用此变量时，向存储引擎发出的事务提交指令将在单个线程上序列化，以便事务始终按照写入二进制日志的相同顺序提交。禁用此变量允许使用多个线程发出事务提交指令。与二进制日志组提交结合使用，可以防止单个事务的提交速率成为吞吐量的瓶颈，因此可能会提高性能。

    当所有相关的存储引擎都已确认事务已准备好提交时，事务将写入二进制日志。然后，二进制日志组提交逻辑在二进制日志写入后提交一组事务。什么时候[`binlog_order_提交`](replication-options-binary-log.html#sysvar_binlog_order_commits)已禁用，因为此进程使用了多个线程，所以提交组中的事务可能会以与其在二进制日志中的顺序不同的顺序提交。（来自单个客户端的事务始终按时间顺序提交。）在许多情况下，这并不重要，因为在单独的交易中执行的操作应产生一致的结果，如果不是这样，则应使用单个交易。

    如果要确保源和多线程副本上的事务历史记录保持相同，请设置[`从属\u保存\u提交\u顺序=1`](replication-options-replica.html#sysvar_slave_preserve_commit_order)在复制品上。

-   [](<>) [`binlog\u旋转\u加密\u主密钥\u启动时`](replication-options-binary-log.html#sysvar_binlog_rotate_encryption_master_key_at_startup)

    [](<>)[](<>)

    | 命令行格式 | `--binlog在启动时旋转加密主密钥[={OFF | ON}]` |
    | ----- | ---------------------------------- |
    | 介绍 | 8.0.14 |
    | 系统变量 | `[binlog_rotate_encryption_master_key_at_startup]（复制选项binary log.html 35; sysvar_binlog_rotate_encryption_master_key_at_startup）` |
    | 范围 | 全球的 |
    | 动态 | 不 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `关` |

    指定是否在服务器启动时旋转二进制日志主密钥。二进制日志主密钥是二进制日志加密密钥，用于加密服务器上二进制日志文件和中继日志文件的文件密码。首次启动启用二进制日志加密的服务器时([`binlog_encryption=ON`](replication-options-binary-log.html#sysvar_binlog_encryption))，生成一个新的二进制日志加密密钥，并将其用作二进制日志主密钥。如果[`binlog\u旋转\u加密\u主密钥\u启动时`](replication-options-binary-log.html#sysvar_binlog_rotate_encryption_master_key_at_startup)系统变量也设置为`在…上`，每当服务器重新启动时，将生成另一个二进制日志加密密钥，并将其用作所有后续二进制日志文件和中继日志文件的二进制日志主密钥。如果[`binlog\u旋转\u加密\u主密钥\u启动时`](replication-options-binary-log.html#sysvar_binlog_rotate_encryption_master_key_at_startup)系统变量设置为`关`，这是默认值。服务器重新启动后，将再次使用现有的二进制日志主密钥。有关二进制日志加密密钥和二进制日志主密钥的更多信息，请参阅[第17.3.2节，“加密二进制日志文件和中继日志文件”](replication-binlog-encryption.html).

-   [](<>) [`binlog\u行\u事件\u最大\u大小`](replication-options-binary-log.html#sysvar_binlog_row_event_max_size)

    [](<>)[](<>)

    | 命令行格式 | `--binlog行事件最大大小=#` |
    | ----- | ------------------- |
    | 系统变量(≥ 8.0.14) | `[binlog_row_event_max_size]（复制选项binary log.html#sysvar_binlog_row_event_max_size）` |
    | 范围(≥ 8.0.14) | 全球的 |
    | 动态的(≥ 8.0.14) | 不 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用(≥ 8.0.14) | 不 |
    | 类型 | 整数 |
    | 默认值 | `8192` |
    | 最小值 | `256` |
    | 最大值（64位平台） | `18446744073709551615` |
    | 最大值（32位平台） | `4294967295` |

    使用基于行的二进制日志记录时，此设置是对基于行的二进制日志事件的最大大小（以字节为单位）的软限制。在可能的情况下，二进制日志中存储的行被分组为大小不超过此设置值的事件。如果无法拆分事件，则可能会超过最大大小。默认值为8192字节。

    块大小为256。在存储系统变量的值之前，MySQL服务器会将不是块大小的精确倍数的值向下舍入到块大小的下一个较低倍数。解析器允许平台的最大无符号整数值（4294967295或2）<sup>32</sup>−1对于32位系统，18446744073709551615或2<sup>64</sup>−1（对于64位系统），但实际最大值比块大小小。

    此全局系统变量是只读的，只能在服务器启动时设置。因此，只能使用`只有你`关键词还是`@@只有你`限定符[`设置`](set.html)陈述

-   [](<>) [`binlog_行_图像`](replication-options-binary-log.html#sysvar_binlog_row_image)

    [](<>)[](<>)

    | 命令行格式 | `--binlog行图像=图像类型` |
    | ----- | ------------------ |
    | 系统变量 | `[binlog_row_image]（复制选项binary log.html#sysvar_binlog_row_image）` |
    | 范围 | 全球会议 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 列举 |
    | 默认值 | `满的` |
    | 有效值 | `满的`（记录所有列）<br/><br/>`最小的`（只记录更改的列，以及标识行所需的列）<br/><br/>`诺布罗布`（记录所有列，不需要的BLOB和文本列除外） |

    对于基于MySQL行的复制，此变量确定如何将行映像写入二进制日志。

    设置此系统变量的会话值是一项受限操作。会话用户必须具有足够的权限来设置受限会话变量。看见[第5.1.9.1节，“系统变量权限”](system-variable-privileges.html).

    在基于MySQL行的复制中，每个行更改事件都包含两个映像，一个是在搜索要更新的行时匹配列的“之前”映像，另一个是包含更改的“之后”映像。通常，MySQL会记录前后图像的完整行（即所有列）。然而，并不是严格要求在两个映像中都包含每一列，我们通常可以通过只记录实际需要的列来节省磁盘、内存和网络使用。

    笔记

    删除行时，只记录前一个图像，因为删除后没有要传播的更改值。插入行时，只记录后面的图像，因为没有要匹配的现有行。只有在更新行时，才需要前后映像，并将它们都写入二进制日志。

    对于before映像，只需要记录唯一标识行所需的最小列集。如果包含行的表具有主键，则只有主键列或多列被写入二进制日志。否则，如果表具有唯一键，则所有列都是`非空`，则只需要记录唯一键中的列。（如果表既没有主键，也没有唯一键，但没有`无效的`列，则所有列都必须在before映像中使用，并记录。）在后映像中，只需要记录实际更改的列。

    您可以使用`binlog_行_图像`系统变量。该变量实际上取三个可能值中的一个，如下表所示：

    -   `满的`：记录前图像和后图像中的所有列。

    -   `最小的`：仅记录前图像中标识要更改的行所需的列；只记录后映像中SQL语句指定值或自动递增生成值的列。

    -   `诺布罗布`：记录所有列（与`满的`)，除了[`斑点`](blob.html)和[`文本`](blob.html)不需要标识行或未更改的列。

    笔记

    NDB群集不支持此变量；设置它对日志记录没有影响[`NDB`](mysql-cluster.html)桌子。

    默认值为`满的`.

    使用时`最小的`或`诺布罗布`，当且仅当源表和目标表的以下条件均为真时，才能保证对给定表进行正确的删除和更新：

    -   所有列必须以相同的顺序出现；每一列必须使用与另一个表中对应列相同的数据类型。

    -   这些表必须具有相同的主键定义。

        （换句话说，表必须相同，但不属于表主键的索引除外。）

        如果不满足这些条件，则目标表中的主键列值可能不足以为删除或更新提供唯一匹配。在这种情况下，不会发出警告或错误；源和副本会悄悄地分离，从而破坏一致性。

        当二进制日志记录格式为`陈述`什么时候[`binlog_格式`](replication-options-binary-log.html#sysvar_binlog_format)是`混合的`，设置为`binlog_行_图像`应用于使用基于行的格式记录的更改，但此设置对记录为语句的更改没有影响。

        背景`binlog_行_图像`在全局或会话级别上都不会导致隐式提交；这意味着可以在事务进行时更改此变量，而不会影响事务。

-   [](<>) [`binlog_行_元数据`](replication-options-binary-log.html#sysvar_binlog_row_metadata)

    [](<>)[](<>)

    | 命令行格式 | `--binlog行元数据=元数据类型` |
    | ----- | -------------------- |
    | 系统变量 | `[binlog_row_metadata]（复制选项binary log.html#sysvar_binlog_row_metadata）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 列举 |
    | 默认值 | `最小的` |
    | 有效值 | `满的`（包括所有元数据）<br/><br/>`最小的`（限制包括元数据） |

    配置使用基于行的日志记录时添加到二进制日志中的表元数据量。当设置为`最小的`，默认值，仅与`签署`将记录标志、列字符集和几何体类型。当设置为`满的`记录表的完整元数据，例如列名，[`枚举`](enum.html)或`设置`字符串值，`主键`信息等等。

    扩展元数据的用途如下：

    -   当元数据的表结构与源的不同时，副本使用元数据传输数据。

    -   外部软件可以使用元数据对行事件进行解码，并将数据存储到外部数据库中，例如数据仓库。

-   [](<>) [`binlog_行_值_选项`](replication-options-binary-log.html#sysvar_binlog_row_value_options)

    [](<>)[](<>)

    | 命令行格式 | `--binlog行值选项=#` |
    | ----- | ---------------- |
    | 系统变量 | `[binlog_row_value_options]（复制选项binary log.html#sysvar_binlog_row_value_options）` |
    | 范围 | 全球会议 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 设置 |
    | 默认值 | `` |
    | 有效值 | `部分_JSON` |

    当设置为`部分_JSON`，这使得在只修改JSON文档一小部分的更新中可以使用节省空间的二进制日志格式，这使得基于行的复制只将JSON文档的修改部分写入二进制日志中更新的后映像，而不是写入完整文档（请参阅[JSON值的部分更新](json.html#json-partial-updates)).这对一个[`使现代化`](update.html)语句，该语句使用以下任意序列修改JSON列：[`JSON_SET（）`](json-modification-functions.html#function_json-set), [`JSON_REPLACE（）`](json-modification-functions.html#function_json-replace)和[`JSON_REMOVE（）`](json-modification-functions.html#function_json-remove)。如果服务器无法生成部分更新，则使用完整文档。

    默认值为空字符串，这将禁用该格式的使用。解除`binlog_行_值_选项`然后返回编写完整的JSON文档，将其值设置为空字符串。

    设置此系统变量的会话值是一项受限操作。会话用户必须具有足够的权限来设置受限会话变量。看见[第5.1.9.1节，“系统变量权限”](system-variable-privileges.html).

    `binlog_row_value_options=PARTIAL_JSON`仅在启用二进制日志记录且[`binlog_格式`](replication-options-binary-log.html#sysvar_binlog_format)即将`一行`或`混合的`.基于语句的复制*总是*只记录JSON文档的修改部分，而不考虑为其设置的任何值`binlog_行_值_选项`.要最大限度地节省空间，请使用[`binlog_row_image=NOBLOB`](replication-options-binary-log.html#sysvar_binlog_row_image)或`binlog_row_image=最小值`再加上这个选项。`binlog_row_image=FULL`由于完整的JSON文档存储在before映像中，而部分更新只存储在after映像中，因此比这两种方法节省的空间都少。

    [**mysqlbinlog**](mysqlbinlog.html)输出包括部分JSON更新，其形式为使用[`宾洛格`](binlog.html)声明。如果[`--冗长的`](mysqlbinlog.html#option_mysqlbinlog_verbose)选项被指定，[**mysqlbinlog**](mysqlbinlog.html)使用伪SQL语句将部分JSON更新显示为可读的JSON。

    如果无法对副本上的JSON文档应用修改，MySQL复制将生成错误。这包括找不到路径。请注意，即使进行了此安全检查和其他安全检查，如果副本上的JSON文档与源上的JSON文档存在差异，并且应用了部分更新，理论上仍然可以在副本上生成有效但意外的JSON文档。

-   [](<>) `binlog\u行\u查询\u日志\u事件`

    [](<>)[](<>)

    | 命令行格式 | `--binlog行查询日志事件[={OFF | ON}]` |
    | ----- | ------------------------------ |
    | 系统变量 | `[binlog_rows_query_log_events]（复制选项binary log.html#sysvar_binlog_rows_query_log_events）` |
    | 范围 | 全球会议 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `关` |

    此系统变量仅影响基于行的日志记录。启用时，它会使服务器将信息日志事件（如行查询日志事件）写入其二进制日志。此信息可用于调试和相关目的，例如在无法从行更新中重建源时获取源上发出的原始查询。

    设置此系统变量的会话值是一项受限操作。会话用户必须具有足够的权限来设置受限会话变量。看见[第5.1.9.1节，“系统变量权限”](system-variable-privileges.html).

    这些信息事件通常被读取二进制日志的MySQL程序忽略，因此在复制或从备份中恢复时不会引起任何问题。要查看它们，请使用mysqlbinlog的[`--冗长的`](mysqlbinlog.html#option_mysqlbinlog_verbose)选择两次，或者`-vv`或`--冗长的`.

-   [](<>) [`binlog_stmt_缓存_大小`](replication-options-binary-log.html#sysvar_binlog_stmt_cache_size)

    [](<>)[](<>)

    | 命令行格式 | `--binlog stmt缓存大小=#` |
    | ----- | --------------------- |
    | 系统变量 | `[binlog_stmt_cache_size]（复制选项binary log.html#sysvar_binlog_stmt_cache_size）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `32768` |
    | 最小值 | `4096` |
    | 最大值（64位平台） | `18446744073709547520` |
    | 最大值（32位平台） | `4294963200` |
    | 块大小 | `4096` |

    二进制日志用于保存事务期间发出的非事务语句的内存缓冲区大小。

    区块大小为4096。在存储系统变量的值之前，MySQL服务器会将不是块大小的精确倍数的值向下舍入到块大小的下一个较低倍数。解析器允许平台的最大无符号整数值（4294967295或2）<sup>32</sup>−1对于32位系统，18446744073709551615或2<sup>64</sup>−1（对于64位系统），但实际最大值比块大小小。

    在服务器上启用二进制日志记录时（使用[`木箱`](replication-options-binary-log.html#sysvar_log_bin)如果服务器支持任何事务存储引擎，系统变量设置为ON），则会为每个客户端分配单独的二进制日志事务和语句缓存。如果事务中使用的非事务语句的数据超过内存缓冲区中的空间，多余的数据将存储在临时文件中。当服务器上的二进制日志加密处于活动状态时，内存缓冲区不会加密，但是（从MySQL 8.0.17）用于保存二进制日志缓存的任何临时文件都会加密。提交每个事务后，通过清除内存缓冲区并截断临时文件（如果使用），重置二进制日志语句缓存。

    如果在事务期间经常使用大型非事务语句，则可以通过减少或消除写入临时文件的需要来增加缓存大小以获得更好的性能。这个[`Binlog_stmt_cache_使用`](server-status-variables.html#statvar_Binlog_stmt_cache_use)和[`Binlog_stmt_缓存_磁盘_使用`](server-status-variables.html#statvar_Binlog_stmt_cache_disk_use)状态变量可用于调整此变量的大小。看见[第5.4.4节，“二进制日志”](binary-log.html).

    这个[`binlog_缓存_大小`](replication-options-binary-log.html#sysvar_binlog_cache_size)系统变量设置事务缓存的大小。

-   [](<>) [`binlog_事务_压缩`](replication-options-binary-log.html#sysvar_binlog_transaction_compression)

    [](<>)[](<>)

    | 命令行格式 | `--binlog事务压缩[={OFF | ON}]` |
    | ----- | --------------------------- |
    | 介绍 | 8.0.20 |
    | 系统变量 | `[binlog_transaction_compression]（复制选项binary log.html#sysvar_binlog_transaction_compression）` |
    | 范围 | 全球会议 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `关` |

    为此服务器上写入二进制日志文件的事务启用压缩。`关`这是默认值。使用[`binlog_事务_压缩_级别_zstd`](replication-options-binary-log.html#sysvar_binlog_transaction_compression_level_zstd)系统变量，用于设置用于压缩的zstd算法的级别。

    启用二进制日志事务压缩后，事务有效负载将被压缩，然后作为单个事件写入二进制日志文件(`事务负载事件`)。压缩的事务有效负载在复制流中发送到副本、其他组复制组成员或客户端（例如）时仍处于压缩状态[**mysqlbinlog**](mysqlbinlog.html)，并以压缩状态写入中继日志。因此，二进制日志事务压缩可以节省事务发起方和接收方（及其备份）的存储空间，并在服务器实例之间发送事务时节省网络带宽。

    对于`binlog_事务_压缩=ON`要产生直接效果，必须在服务器上启用二进制日志记录。当一个MySQL服务器实例没有二进制日志时，如果它是MySQL 8.0.20的一个版本，它可以接收、处理和显示压缩的事务有效负载，而不管其值为多少[`binlog_事务_压缩`](replication-options-binary-log.html#sysvar_binlog_transaction_compression)。此类服务器实例收到的压缩事务有效负载以其压缩状态写入中继日志，因此它们间接受益于复制拓扑中其他服务器执行的压缩。

    不能在事务上下文中更改此系统变量。设置此系统变量的会话值是一项受限操作。会话用户必须具有足够的权限来设置受限会话变量。看见[第5.1.9.1节，“系统变量权限”](system-variable-privileges.html).

    有关二进制日志事务压缩的更多信息，包括哪些事件被压缩和未被压缩的详细信息，以及使用事务压缩时行为的变化，请参阅[第5.4.4.5节，“二进制日志事务压缩”](binary-log-transaction-compression.html).

-   [](<>) [`binlog_事务_压缩_级别_zstd`](replication-options-binary-log.html#sysvar_binlog_transaction_compression_level_zstd)

    [](<>)[](<>)

    | 命令行格式 | `--binlog事务压缩级别zstd=#` |
    | ----- | ---------------------- |
    | 介绍 | 8.0.20 |
    | 系统变量 | `[binlog_transaction_compression_level_zstd]（复制选项binary log.html#sysvar_binlog_transaction_compression_level_zstd）` |
    | 范围 | 全球会议 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `3.` |
    | 最小值 | `1.` |
    | 最大值 | `22` |

    设置此服务器上二进制日志事务压缩的压缩级别，该级别由[`binlog_事务_压缩`](replication-options-binary-log.html#sysvar_binlog_transaction_compression)系统变量。该值是一个整数，用于确定压缩效果，从1（最低效果）到22（最高效果）。如果未指定此系统变量，则压缩级别设置为3。

    随着压缩级别的增加，数据压缩率也会增加，从而减少事务负载所需的存储空间和网络带宽。然而，数据压缩所需的工作量也会增加，这会占用原始服务器上的时间、CPU和内存资源。压缩工作量的增加与数据压缩比的增加没有线性关系。

    不能在事务上下文中更改此系统变量。设置此系统变量的会话值是一项受限操作。会话用户必须具有足够的权限来设置受限会话变量。看见[第5.1.9.1节，“系统变量权限”](system-variable-privileges.html).

-   [](<>) [`binlog_事务_依赖关系_跟踪`](replication-options-binary-log.html#sysvar_binlog_transaction_dependency_tracking)

    [](<>)[](<>)

    | 命令行格式 | `--binlog事务依赖项跟踪=值` |
    | ----- | ------------------- |
    | 系统变量 | `[binlog_transaction_dependency_tracking]（复制选项binary log.html#sysvar_binlog_transaction_dependency_tracking）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 列举 |
    | 默认值 | `提交命令` |
    | 有效值 | `提交命令`<br/><br/>`写集`<br/><br/>`WRITESET_会话` |

    对于具有多线程副本的复制源服务器[`复制并行工作人员`](replication-options-replica.html#sysvar_replica_parallel_workers)或[`奴隶工人`](replication-options-replica.html#sysvar_slave_parallel_workers)设置为大于0的值），[`binlog_事务_依赖关系_跟踪`](replication-options-binary-log.html#sysvar_binlog_transaction_dependency_tracking)指定源在二进制日志中记录的依赖关系信息的源，以帮助副本确定哪些事务可以并行执行。可能的值为：

    -   `提交命令`：依赖项信息由源的提交时间戳生成。这是默认设置。

    -   `写集`：依赖信息是从源的写集生成的，任何写不同元组的事务都可以并行化。

    -   `WRITESET_会话`：依赖项信息是从源的写入集生成的，任何写入不同元组的事务都可以并行化，但同一会话中的两个更新不能重新排序。

        在里面`写集`或`WRITESET_会话`模式下，事务可以无序提交，除非您还设置[`副本保存提交顺序=1`](replication-options-replica.html#sysvar_replica_preserve_commit_order)或[`从属\u保存\u提交\u顺序=1`](replication-options-replica.html#sysvar_slave_preserve_commit_order).

        对于某些交易`写集`和`WRITESET_会话`模式无法改善本应在中返回的结果`提交命令`模式对于具有空或部分写入集的事务、更新没有主键或唯一键的表的事务，以及更新外键关系中的父表的事务，都是如此。在这些情况下，源代码使用`提交命令`模式来生成依赖项信息。

        设置`写集`或`WRITESET_会话`作为值[`binlog_transaction_dependency_tracking`](replication-options-binary-log.html#sysvar_binlog_transaction_dependency_tracking),[`transaction_write_set_extraction`](replication-options-binary-log.html#sysvar_transaction_write_set_extraction)必须设置或默认指定算法（未设置为`离开`）。MySQL 8.0 中的默认设置是[`transaction_write_set_extraction`](replication-options-binary-log.html#sysvar_transaction_write_set_extraction)被设定为`XXHASH64`，这是组复制所需的设置。您选择的值[`transaction_write_set_extraction`](replication-options-binary-log.html#sysvar_transaction_write_set_extraction)不能再次更改，而值[`binlog_transaction_dependency_tracking`](replication-options-binary-log.html#sysvar_binlog_transaction_dependency_tracking)仍然是`写集`要么`WRITESET_SESSION`.如果更改该值，则新值不会在副本上生效，直到副本停止并重新启动后[`停止复制`](stop-replica.html)和[`开始复制`](start-replica.html)陈述。[`transaction_write_set_extraction`](replication-options-binary-log.html#sysvar_transaction_write_set_extraction)已从 MySQL 8.0.26 中弃用，并将在未来的 MySQL 版本中删除。

        要保留和检查是否已更改给定行的最新事务的行哈希数由[`binlog_transaction_dependency_history_size`](replication-options-binary-log.html#sysvar_binlog_transaction_dependency_history_size).

        当从中继日志应用事务时，组复制在认证后执行自己的并行化，独立于为[`binlog_transaction_dependency_tracking`](replication-options-binary-log.html#sysvar_binlog_transaction_dependency_tracking).然而，价值[`binlog_transaction_dependency_tracking`](replication-options-binary-log.html#sysvar_binlog_transaction_dependency_tracking)确实会影响事务如何写入组复制成员上的二进制日志。这些日志中的依赖信息用于协助从捐赠者的二进制日志进行状态转移的过程，以进行分布式恢复，每当成员加入或重新加入组时，就会发生这种情况。对于该过程，设置[`binlog_transaction_dependency_tracking=WRITESET`](replication-options-binary-log.html#sysvar_binlog_transaction_dependency_tracking)可以提高组成员的性能，具体取决于组的工作量。

-   [](<>) [`binlog_transaction_dependency_history_size`](replication-options-binary-log.html#sysvar_binlog_transaction_dependency_history_size)

    [](<>)[](<>)

    | 命令行格式 | `--binlog-transaction-dependency-history-size=#` |
    | ----- | ------------------------------------------------ |
    | 系统变量 | `[binlog_transaction_dependency_history_size](replication-options-binary-log.html#sysvar_binlog_transaction_dependency_history_size)` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `25000` |
    | 最小值 | `1` |
    | 最大值 | `1000000` |

    设置保存在内存中并用于查找最后修改给定行的事务的行哈希数的上限。一旦达到这个哈希值，历史就会被清除。

-   [](<>) [`expire_logs_days`](replication-options-binary-log.html#sysvar_expire_logs_days)

    [](<>)[](<>)

    | 命令行格式 | `--expire-logs-days=#` |
    | ----- | ---------------------- |
    | 已弃用 | 是的 |
    | 系统变量 | `[expire_logs_days]（复制选项-二进制-log.html#sysvar_expire_logs_days）` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `0` |
    | 最小值 | `0` |
    | 最大值 | `99` |

    指定自动删除二进制日志文件之前的天数。[`expire_logs_days`](replication-options-binary-log.html#sysvar_expire_logs_days)已弃用，您应该期望它在未来的版本中被删除。相反，使用[`binlog_expire_logs_seconds`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds)，它以秒为单位设置二进制日志的过期时间。如果您没有为任一系统变量设置值，则默认有效期为 30 天。可能的删除发生在启动和刷新二进制日志时。发生日志刷新，如中所示[第 5.4 节，“MySQL 服务器日志”](server-logs.html).

    您在启动时指定的任何非零值[`expire_logs_days`](replication-options-binary-log.html#sysvar_expire_logs_days)被忽略，如果[`binlog_expire_logs_seconds`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds)也被指定，并且的值[`binlog_expire_logs_seconds`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds)而是用作二进制日志的有效期。在这种情况下会发出警告消息。一个非零的启动值[`expire_logs_days`](replication-options-binary-log.html#sysvar_expire_logs_days)仅适用于二进制日志有效期，如果[`binlog_expire_logs_seconds`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds)未指定或指定为 0。

    在运行时，您不能设置[`binlog_expire_logs_seconds`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds)要么[`expire_logs_days`](replication-options-binary-log.html#sysvar_expire_logs_days)如果另一个当前设置为非零值，则设置为非零值。因为默认值为[`binlog_expire_logs_seconds`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds)非零，必须显式设置[`binlog_expire_logs_seconds`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds)在您可以设置或更改的值之前为零[`expire_logs_days`](replication-options-binary-log.html#sysvar_expire_logs_days).

    要禁用二进制日志的自动清除，请显式指定值 0[`binlog_expire_logs_seconds`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds)，并且不指定值[`expire_logs_days`](replication-options-binary-log.html#sysvar_expire_logs_days).为了与早期版本兼容，如果您明确指定值 0 为[`expire_logs_days`](replication-options-binary-log.html#sysvar_expire_logs_days)并且不指定值[`binlog_expire_logs_seconds`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds).在这种情况下，默认为[`binlog_expire_logs_seconds`](replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds)未应用。

    要手动删除二进制日志文件，请使用[`清除二进制日志`](purge-binary-logs.html)陈述。看[第 13.4.1.1 节，“PURGE BINARY LOGS 语句”](purge-binary-logs.html).

-   [](<>) [`log_bin`](replication-options-binary-log.html#sysvar_log_bin)

    [](<>)[](<>)

    | 系统变量 | `[log_bin]（复制选项-二进制-log.html#sysvar_log_bin）` |
    | ---- | --------------------------------------------- |
    | 范围 | 全球的 |
    | 动态的 | 不 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |

    显示服务器上二进制日志的状态，无论是启用（`在`) 或禁用 (`离开`）。启用二进制日志后，服务器会将所有更改数据的语句记录到二进制日志中，用于备份和复制。`在`表示二进制日志可用，`离开`表示未使用。这[`--log-bin`](replication-options-binary-log.html#option_mysqld_log-bin)选项可用于指定二进制日志的基本名称和位置。

    在早期的 MySQL 版本中，默认情况下禁用二进制日志记录，如果您指定了`--log-bin`选项。从 MySQL 8.0 开始，默认启用二进制日志记录，使用`log_bin`系统变量设置为`在`，无论您是否指定`--log-bin`选项。例外情况是，如果您使用[**mysqld**](mysqld.html)通过调用它来手动初始化数据目录`- 初始化`要么`--初始化不安全`选项，当二进制日志默认禁用时。在这种情况下，可以通过指定`--log-bin`选项。

    如果[`--skip-log-bin`](replication-options-binary-log.html#option_mysqld_log-bin)要么[`--disable-log-bin`](replication-options-binary-log.html#option_mysqld_log-bin)选项在启动时指定，二进制日志记录被禁用，使用`log_bin`系统变量设置为`离开`.如果指定了这些选项中的任何一个并且`--log-bin`也指定，后面指定的选项优先。

    有关二进制日志的格式和管理的信息，请参阅[第 5.4.4 节，“二进制日志”](binary-log.html).

-   [](<>) [`log_bin_basename`](replication-options-binary-log.html#sysvar_log_bin_basename)

    [](<>)[](<>)

    | 系统变量 | `[log_bin_basename]（复制选项-二进制-log.html#sysvar_log_bin_basename）` |
    | ---- | --------------------------------------------------------------- |
    | 范围 | 全球的 |
    | 动态 | 不 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 文件名 |

    保存二进制日志文件的基本名称和路径，可以使用[`--木箱`](replication-options-binary-log.html#option_mysqld_log-bin)服务器选项。最大可变长度为256。在MySQL 8.0中，如果`--木箱`未提供选项，默认基名称为`二进制日志`.为了与MySQL 5.7兼容，如果`--木箱`选项不带字符串或空字符串，默认基名称为`*`主机名`*-垃圾箱`，使用主机的名称。默认位置是数据目录。

-   [](<>) [`log_bin_索引`](replication-options-binary-log.html#sysvar_log_bin_index)

    [](<>)[](<>)

    | 命令行格式 | `--log bin index=文件名` |
    | ----- | --------------------- |
    | 系统变量 | `[log_bin_index]（复制选项binary log.html#sysvar_log_bin_index）` |
    | 范围 | 全球的 |
    | 动态 | 不 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 文件名 |

    保存二进制日志索引文件的基本名称和路径，可以使用[`--日志箱索引`](replication-options-binary-log.html#option_mysqld_log-bin-index)服务器选项。最大可变长度为256。

-   [](<>) [`日志\u bin\u信任\u函数\u创建者`](replication-options-binary-log.html#sysvar_log_bin_trust_function_creators)

    [](<>)[](<>)

    | 命令行格式 | `--log bin信任函数创建者[={OFF | ON}]` |
    | ----- | ------------------------------- |
    | 系统变量 | `[log_bin_trust_function_creators]（复制选项binary log.html#sysvar_log_bin_trust_function_creators）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `关` |

    启用二进制日志记录时，此变量适用。它控制是否可以信任存储函数创建者不创建可能导致不安全事件写入二进制日志的存储函数。如果设置为0（默认值），则不允许用户创建或更改存储函数，除非用户具有[`超级的`](privileges-provided.html#priv_super)除了[`创建例行程序`](privileges-provided.html#priv_create-routine)或[`改变常规`](privileges-provided.html#priv_alter-routine)特权设置为0还强制限制必须使用`确定性`有特点的，或与`读取SQL数据`或`没有SQL`特征如果变量设置为1，MySQL不会对存储函数的创建实施这些限制。此变量也适用于触发器创建。看见[第25.7节，“存储程序二进制记录”](stored-programs-logging.html).

-   [](<>) [`记录\u bin\u使用\u v1\u行\u事件`](replication-options-binary-log.html#sysvar_log_bin_use_v1_row_events)

    [](<>)[](<>)

    | 命令行格式 | `--log-bin-use-v1-row-events[={OFF | ON}]` |
    | ----- | ------------------------------------------ |
    | 反对 | 8.0.18 |
    | 系统变量 | `[log_bin_use_v1_row_events]（复制选项binary log.html#sysvar_log_bin_use_v1_row_events）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `关` |

    此只读系统变量已弃用。将系统变量设置为`在…上`在服务器启动时，通过使用版本1二进制日志行事件（而不是MySQL 5.6的默认版本2二进制日志行事件）写入二进制日志，启用了基于行的复制，副本运行MySQL server 5.5及更早版本。

-   [](<>) [`日志副本更新`](replication-options-binary-log.html#sysvar_log_replica_updates)

    [](<>)[](<>)

    | 命令行格式 | `--记录副本更新[={OFF | ON}]` |
    | ----- | ----------------------- |
    | 介绍 | 8.0.26 |
    | 系统变量 | `[log_replica_updates]（复制选项binary log.html#sysvar_log_replica_updates）` |
    | 范围 | 全球的 |
    | 动态 | 不 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `在…上` |

    在MySQL 8.0.26中，使用[`日志副本更新`](replication-options-binary-log.html#sysvar_log_replica_updates)代替[`日志_slave _更新`](replication-options-binary-log.html#sysvar_log_slave_updates)，该版本已弃用。在MySQL 8.0.26之前的版本中，使用[`日志_slave _更新`](replication-options-binary-log.html#sysvar_log_slave_updates).

    [`日志副本更新`](replication-options-binary-log.html#sysvar_log_replica_updates)指定是否应将副本服务器从复制源服务器接收的更新记录到副本自己的二进制日志中。

    启用此变量会导致复制副本将从源接收并由复制SQL线程执行的更新写入复制副本自己的二进制日志。二进制日志记录，由[`--木箱`](replication-options-binary-log.html#option_mysqld_log-bin)选项，并且默认情况下已启用，还必须在复制副本上启用，才能记录更新。看见[第17.1.6节，“复制和二进制日志记录选项和变量”](replication-options.html). [`日志副本更新`](replication-options-binary-log.html#sysvar_log_replica_updates)默认情况下启用，除非指定[`--跳过日志箱`](replication-options-binary-log.html#option_mysqld_log-bin)要禁用二进制日志记录，在这种情况下，默认情况下MySQL也会禁用副本更新日志记录。如果需要在启用二进制日志记录时禁用副本更新日志记录，请指定[`--日志副本更新=关闭`](replication-options-binary-log.html#sysvar_log_replica_updates)在副本服务器启动时。

    有可能[`日志副本更新`](replication-options-binary-log.html#sysvar_log_replica_updates)使复制服务器能够链接。例如，您可能希望使用以下安排设置复制服务器：

    ```
    A -> B -> C
    ```

    在这里`A.`用作复制副本的源`B`和`B`用作复制副本的源`C`.为了让它发挥作用，`B`一定是来源*和*复制品。启用二进制日志记录并[`日志副本更新`](replication-options-binary-log.html#sysvar_log_replica_updates)已启用，这是默认设置，从`A.`都是由`B`它的二进制日志，因此可以传递给`C`.

-   [](<>) [`日志_slave _更新`](replication-options-binary-log.html#sysvar_log_slave_updates)

    [](<>)[](<>)

    | 命令行格式 | `--记录从机更新[={OFF | ON}]` |
    | ----- | ----------------------- |
    | 反对 | 8.0.26 |
    | 系统变量 | `[log_slave_updates]（复制选项binary log.html#sysvar_log_slave_updates）` |
    | 范围 | 全球的 |
    | 动态 | 不 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `在…上` |

    从MySQL 8.0.26开始，[`日志_slave _更新`](replication-options-binary-log.html#sysvar_log_slave_updates)已弃用，且别名[`日志副本更新`](replication-options-binary-log.html#sysvar_log_replica_updates)应该改用。在MySQL 8.0.26之前的版本中，使用[`日志_slave _更新`](replication-options-binary-log.html#sysvar_log_slave_updates).

    [`日志_slave _更新`](replication-options-binary-log.html#sysvar_log_slave_updates)指定是否应将副本服务器从复制源服务器接收的更新记录到副本自己的二进制日志中。

    启用此变量会导致复制副本将从源接收并由复制SQL线程执行的更新写入复制副本自己的二进制日志。二进制日志记录，由[`--木箱`](replication-options-binary-log.html#option_mysqld_log-bin)选项，并且默认情况下已启用，还必须在复制副本上启用，才能记录更新。看见[第17.1.6节，“复制和二进制日志记录选项和变量”](replication-options.html). [`日志_slave _更新`](replication-options-binary-log.html#sysvar_log_slave_updates)默认情况下启用，除非指定[`--跳过日志箱`](replication-options-binary-log.html#option_mysqld_log-bin)要禁用二进制日志记录，在这种情况下，默认情况下MySQL也会禁用副本更新日志记录。如果需要在启用二进制日志记录时禁用副本更新日志记录，请指定[`--日志从属更新=关闭`](replication-options-binary-log.html#sysvar_log_slave_updates)在副本服务器启动时。

    有可能[`日志_slave _更新`](replication-options-binary-log.html#sysvar_log_slave_updates)使复制服务器能够链接。例如，您可能希望使用以下安排设置复制服务器：

    ```
    A -> B -> C
    ```

    在这里`A.`用作复制副本的源`B`和`B`用作复制副本的源`C`.为了让它发挥作用，`B`一定是来源*和*复制品。启用二进制日志记录并[`日志_slave _更新`](replication-options-binary-log.html#sysvar_log_slave_updates)已启用，这是默认设置，从`A.`都是由`B`它的二进制日志，因此可以传递给`C`.

-   [](<>) [`日志\u语句\u不安全\u用于\u binlog`](replication-options-binary-log.html#sysvar_log_statements_unsafe_for_binlog)

    [](<>)[](<>)

    | 命令行格式 | `--日志语句对binlog不安全[={OFF | ON}]` |
    | ----- | ------------------------------- |
    | 系统变量 | `[log_statements_unsafe_for_binlog]（复制选项binary log.html#sysvar_log_statements_unsafe_for_binlog）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `在…上` |

    如果遇到错误1592，控制是否将生成的警告添加到错误日志中。

-   [](<>) [`主校验校验和`](replication-options-binary-log.html#sysvar_master_verify_checksum)

    [](<>)[](<>)

    | 命令行格式 | `--主验证校验和[={OFF | ON}]` |
    | ----- | ----------------------- |
    | 反对 | 8.0.26 |
    | 系统变量 | `[master_verify_checksum]（复制选项binary log.html#sysvar_master_verify_checksum）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `关` |

    从MySQL 8.0.26开始，[`主校验校验和`](replication-options-binary-log.html#sysvar_master_verify_checksum)已弃用，且别名[`源校验校验和`](replication-options-binary-log.html#sysvar_source_verify_checksum)应该改用。在MySQL 8.0.26之前的版本中，使用[`主校验校验和`](replication-options-binary-log.html#sysvar_master_verify_checksum).

    有可能[`主校验校验和`](replication-options-binary-log.html#sysvar_master_verify_checksum)使源通过检查校验和来验证从二进制日志读取的事件，并在不匹配的情况下以错误停止。[`主校验校验和`](replication-options-binary-log.html#sysvar_master_verify_checksum)默认情况下是禁用的；在这种情况下，源使用二进制日志中的事件长度来验证事件，这样就只能从二进制日志中读取完整的事件。

-   [](<>) [`最大binlog缓存大小`](replication-options-binary-log.html#sysvar_max_binlog_cache_size)

    [](<>)[](<>)

    | 命令行格式 | `--最大binlog缓存大小=#` |
    | ----- | ------------------ |
    | 系统变量 | `[max_binlog_cache_size]（复制选项binary log.html#sysvar_max_binlog_cache_size）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `18446744073709547520` |
    | 最小值 | `4096` |
    | 最大值 | `18446744073709547520` |
    | 块大小 | `4096` |

    如果一个事务需要的内存超过这么多字节，服务器将生成一个需要超过“max”的多语句事务\_二进制日志\_隐藏物\_“大小”字节的存储错误。最小值为4096。最大可能值为16EiB（exbibytes）。最大建议值为4GB；这是因为MySQL目前无法处理大于4GB的二进制日志位置。

    区块大小为4096。在存储系统变量的值之前，MySQL服务器会将不是块大小的精确倍数的值向下舍入到块大小的下一个较低倍数。解析器允许平台的最大无符号整数值（4294967295或2）<sup>32</sup>−1对于32位系统，18446744073709551615或2<sup>64</sup>−1（对于64位系统），但实际最大值比块大小小。

    `最大binlog缓存大小`仅设置事务缓存的大小；语句缓存的上限由[`最大\u binlog\u stmt\u缓存\u大小`](replication-options-binary-log.html#sysvar_max_binlog_stmt_cache_size)系统变量。

    会议的可视性`最大binlog缓存大小`和[`binlog_缓存_大小`](replication-options-binary-log.html#sysvar_binlog_cache_size)系统变量；换句话说，更改其值只会影响更改值后启动的新会话。

-   [](<>) [`最大尺寸`](replication-options-binary-log.html#sysvar_max_binlog_size)

    [](<>)[](<>)

    | 命令行格式 | `--最大binlog大小=#` |
    | ----- | ---------------- |
    | 系统变量 | `[max_binlog_size]（复制选项binary log.html#sysvar_max_binlog_size）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `1073741824` |
    | 最小值 | `4096` |
    | 最大值 | `1073741824` |
    | 块大小 | `4096` |

    如果对二进制日志的写入导致当前日志文件大小超过此变量的值，服务器将旋转二进制日志（关闭当前文件并打开下一个文件）。最小值为4096字节。最大和默认值为1GB。加密的二进制日志文件还有一个512字节的头文件，包含在[`最大尺寸`](replication-options-binary-log.html#sysvar_max_binlog_size).

    事务以一个块的形式写入二进制日志，因此它永远不会在多个二进制日志之间拆分。因此，如果您有大型事务，您可能会看到二进制日志文件比[`最大尺寸`](replication-options-binary-log.html#sysvar_max_binlog_size).

    如果[`最大继电器日志大小`](replication-options-replica.html#sysvar_max_relay_log_size)是0，表示[`最大尺寸`](replication-options-binary-log.html#sysvar_max_binlog_size)也适用于中继日志。

    在服务器上使用GTID时[`最大尺寸`](replication-options-binary-log.html#sysvar_max_binlog_size)如果系统表`mysql。gtid_已执行`无法访问以从当前二进制日志文件写入GTID，二进制日志无法旋转。在这种情况下，服务器会根据其[`binlog_错误_操作`](replication-options-binary-log.html#sysvar_binlog_error_action)背景如果`忽略错误`设置时，会在服务器上记录错误并停止二进制记录，或者`中止服务器`设置后，服务器将关闭。

-   [](<>) [`最大\u binlog\u stmt\u缓存\u大小`](replication-options-binary-log.html#sysvar_max_binlog_stmt_cache_size)

    [](<>)[](<>)

    | 命令行格式 | `--最大binlog stmt缓存大小=#` |
    | ----- | ----------------------- |
    | 系统变量 | `[max_binlog_stmt_cache_size]（复制选项binary log.html#sysvar_max_binlog_stmt_cache_size）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `18446744073709547520` |
    | 最小值 | `4096` |
    | 最大值 | `18446744073709547520` |
    | 块大小 | `4096` |

    如果事务中的非事务语句需要的内存超过这个字节，服务器将生成一个错误。最小值为4096。32位平台上的最大值和默认值为4GB，64位平台上的最大值和默认值为16EB（EB）。

    区块大小为4096。在存储系统变量的值之前，MySQL服务器会将不是块大小的精确倍数的值向下舍入到块大小的下一个较低倍数。解析器允许平台的最大无符号整数值（4294967295或2）<sup>32</sup>−1对于32位系统，18446744073709551615或2<sup>64</sup>−1（对于64位系统），但实际最大值比块大小小。

    `最大\u binlog\u stmt\u缓存\u大小`仅设置语句缓存的大小；事务缓存的上限由[`最大binlog缓存大小`](replication-options-binary-log.html#sysvar_max_binlog_cache_size)系统变量。

-   [](<>) [`原始提交时间戳`](replication-options-binary-log.html#sysvar_original_commit_timestamp)

    [](<>)[](<>)

    | 系统变量 | `[original_commit_timestamp]（复制选项binary log.html#sysvar_original_commit_timestamp）` |
    | ---- | ----------------------------------------------------------------------------------- |
    | 范围 | 一场 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 数字的 |

    供复制的内部使用。在副本上重新执行事务时，该时间设置为事务在原始源上提交的时间，以自纪元以来的微秒为单位。这允许原始提交时间戳在整个复制拓扑中传播。

    设置此系统变量的会话值是一项受限操作。会话用户必须具有[`复制应用程序`](privileges-provided.html#priv_replication-applier)特权（见[第17.3.3节，“复制权限检查”](replication-privilege-checks.html))，或足以设置受限会话变量的权限（请参阅[第5.1.9.1节，“系统变量权限”](system-variable-privileges.html)).但是，请注意，该变量不是供用户设置的；它由复制基础架构自动设置。

-   [](<>) [`源校验校验和`](replication-options-binary-log.html#sysvar_source_verify_checksum)

    [](<>)[](<>)

    | 命令行格式 | `--源验证校验和[={OFF | ON}]` |
    | ----- | ----------------------- |
    | 介绍 | 8.0.26 |
    | 系统变量 | `[source_verify_checksum]（复制选项binary log.html#sysvar_source_verify_checksum）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `关` |

    在MySQL 8.0.26中，使用[`源校验校验和`](replication-options-binary-log.html#sysvar_source_verify_checksum)代替[`主校验校验和`](replication-options-binary-log.html#sysvar_master_verify_checksum)，该版本已弃用。在MySQL 8.0.26之前的版本中，使用[`主校验校验和`](replication-options-binary-log.html#sysvar_master_verify_checksum).

    有可能[`源校验校验和`](replication-options-binary-log.html#sysvar_source_verify_checksum)使源通过检查校验和来验证从二进制日志读取的事件，并在不匹配的情况下以错误停止。[`源校验校验和`](replication-options-binary-log.html#sysvar_source_verify_checksum)默认情况下是禁用的；在这种情况下，源使用二进制日志中的事件长度来验证事件，这样就只能从二进制日志中读取完整的事件。

-   [](<>) [`sql_log_bin`](replication-options-binary-log.html#sysvar_sql_log_bin)

    [](<>)[](<>)

    | 系统变量 | `[sql_log_bin]（复制选项binary log.html#sysvar_sql_log_bin）` |
    | ---- | ------------------------------------------------------- |
    | 范围 | 一场 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `在…上` |

    此变量控制当前会话是否启用二进制日志记录（假设二进制日志本身已启用）。默认值为`在…上`。要禁用或启用当前会话的二进制日志记录，请设置会话[`sql_log_bin`](replication-options-binary-log.html#sysvar_sql_log_bin)可变到`关`或`在…上`.

    将此变量设置为`关`对于在对源进行更改时临时禁用二进制日志记录的会话，您不希望将其复制到复制副本。

    设置此系统变量的会话值是一项受限操作。会话用户必须具有足够的权限来设置受限会话变量。看见[第5.1.9.1节，“系统变量权限”](system-variable-privileges.html).

    无法设置的会话值[`sql_log_bin`](replication-options-binary-log.html#sysvar_sql_log_bin)在事务或子查询中。

    *将此变量设置为`关`防止将GTID分配给二进制日志中的事务*。如果您使用GTID进行复制，这意味着即使以后再次启用二进制日志记录，从这一点写入日志的GTID也不会考虑同时发生的任何事务，因此实际上这些事务会丢失。

-   [](<>) [`sync_binlog`](replication-options-binary-log.html#sysvar_sync_binlog)

    [](<>)[](<>)

    | 命令行格式 | `--同步binlog=#` |
    | ----- | -------------- |
    | 系统变量 | `[sync_binlog]（复制选项binary log.html#sysvar_sync_binlog）` |
    | 范围 | 全球的 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值 | `1.` |
    | 最小值 | `0` |
    | 最大值 | `4294967295` |

    控制MySQL服务器将二进制日志同步到磁盘的频率。

    -   [`sync_binlog=0`](replication-options-binary-log.html#sysvar_sync_binlog)：禁用MySQL服务器将二进制日志同步到磁盘。相反，MySQL服务器依赖操作系统不时地将二进制日志刷新到磁盘上，就像处理任何其他文件一样。此设置提供了最佳性能，但在电源故障或操作系统崩溃的情况下，服务器可能提交了尚未同步到二进制日志的事务。

    -   [`sync_binlog=1`](replication-options-binary-log.html#sysvar_sync_binlog)：启用在提交事务之前将二进制日志同步到磁盘。这是最安全的设置，但由于磁盘写入次数增加，可能会对性能产生负面影响。在电源故障或操作系统崩溃的情况下，二进制日志中丢失的事务仅处于准备状态。这允许自动恢复例程回滚事务，从而确保不会从二进制日志中丢失任何事务。

    -   [`sync_binlog=*`N`*`](replication-options-binary-log.html#sysvar_sync_binlog)哪里*`N`*不是0或1的值：二进制日志在`N`已收集二进制日志提交组。在电源故障或操作系统崩溃的情况下，服务器可能提交了尚未刷新到二进制日志的事务。由于磁盘写入次数增加，此设置可能会对性能产生负面影响。更高的值可以提高性能，但会增加数据丢失的风险。

        在使用`InnoDB`对于事务，请使用以下设置：

    -   [`sync_binlog=1`](replication-options-binary-log.html#sysvar_sync_binlog).

    -   [`innodb_flush_log_at_trx_commit=1`](innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit).

    小心

    许多操作系统和一些磁盘硬件愚弄了磁盘刷新操作。他们可能知道[**mysqld**](mysqld.html)虽然还没有，但已经发生了冲水。在这种情况下，即使使用了建议的设置，也无法保证事务的持久性，在最坏的情况下，断电可能会导致损坏`InnoDB`数据在SCSI磁盘控制器或磁盘本身中使用电池备份的磁盘缓存可以加快文件刷新速度，并使操作更安全。您还可以尝试禁用硬件缓存中磁盘写入的缓存。

-   [](<>) [`事务_写入_集_提取`](replication-options-binary-log.html#sysvar_transaction_write_set_extraction)

    [](<>)[](<>)

    | 命令行格式 | `--事务写入集提取[=值]` |
    | ----- | --------------- |
    | 反对 | 8.0.26 |
    | 系统变量 | `[transaction_write_set_extraction]（复制选项binary log.html#sysvar_transaction_write_set_extraction）` |
    | 范围 | 全球会议 |
    | 动态 | 对 |
    | [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 列举 |
    | 默认值 | `XX64` |
    | 有效值 | `关`<br/><br/>`杂音32`<br/><br/>`XX64` |

    此系统变量指定用于对事务期间提取的写操作进行哈希运算的算法。MySQL 8.0中的默认设置是[`事务_写入_集_提取`](replication-options-binary-log.html#sysvar_transaction_write_set_extraction)即将`XX64`. `关`表示不收集写入集。[`事务_写入_集_提取`](replication-options-binary-log.html#sysvar_transaction_write_set_extraction)已从MySQL 8.0.26中弃用，并将在未来的MySQL版本中删除。

    这个`XX64`组复制需要设置，从事务中提取写操作的过程用于对所有组成员进行冲突检测和认证（请参阅[第18.3.1节，“组复制要求”](group-replication-requirements.html))。对于具有多线程副本的复制源服务器[`复制并行工作人员`](replication-options-replica.html#sysvar_replica_parallel_workers)或[`奴隶工人`](replication-options-replica.html#sysvar_slave_parallel_workers)设置为大于0的值），其中[`binlog_事务_依赖关系_跟踪`](replication-options-binary-log.html#sysvar_binlog_transaction_dependency_tracking)即将`写集`或`WRITESET_会话`要从源的写集生成依赖项信息，[`事务_写入_集_提取`](replication-options-binary-log.html#sysvar_transaction_write_set_extraction)必须设置或默认以指定算法（未设置为`关`).而[`binlog_事务_依赖关系_跟踪`](replication-options-binary-log.html#sysvar_binlog_transaction_dependency_tracking)是`写集`或`WRITESET_会话`，则不能更改的值[`事务_写入_集_提取`](replication-options-binary-log.html#sysvar_transaction_write_set_extraction).

    从MySQL 8.0.14开始，设置此系统变量的会话值是一项受限操作。会话用户必须具有足够的权限来设置受限会话变量。看见[第5.1.9.1节，“系统变量权限”](system-variable-privileges.html). [`binlog_格式`](replication-options-binary-log.html#sysvar_binlog_format)必须设置为`一行`更改此系统变量的值。如果更改该值，则新值在复制副本停止并重新启动后才会对复制副本生效[`停止复制`](stop-replica.html)和[`开始复制`](start-replica.html)声明。
