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

[17.1.6.1 复制和二进制日志记录选项和变量引用](replication-options-reference.html)
[17.1.6.2 复制源选项和变量](replication-options-source.html)
[17.1.6.3 副本服务器选项和变量](replication-options-replica.html)
[17.1.6.4 二进制日志选项和变量](replication-options-binary-log.html)
[17.1.6.5 全局事务 ID 系统变量](replication-options-gtids.html)

以下部分包含有关信息[**mysqld**](mysqld.html)用于复制和控制二进制日志的选项和服务器变量。用于源和副本的选项和变量将单独介绍，与二进制日志记录和全局事务标识符 (GTID) 相关的选项和变量也是如此。还包括一组快速参考表，提供有关这些选项和变量的基本信息。

[](<>)特别重要的是[`server_id`](replication-options.html#sysvar_server_id)系统变量。

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

| 命令行格式 | `--server-id=#` |
| ----- | --------------- |
| 系统变量 | `[server_id](replication-options.html#sysvar_server_id)` |
| 范围 | 全球的 |
| 动态的 | 是的 |
| [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
| 类型 | 整数 |
| 默认值 | `1` |
| 最小值 | `0` |
| 最大值 | `4294967295` |

此变量指定服务器ID。[`服务器id`](replication-options.html#sysvar_server_id)默认情况下设置为1。可以使用此默认ID启动服务器，但当启用二进制日志记录时，如果未设置[`服务器id`](replication-options.html#sysvar_server_id)显式地指定服务器ID。

对于复制拓扑中使用的服务器，必须为每个复制服务器指定一个唯一的服务器ID，范围从1到2<sup>32</sup>− 1.“唯一”表示每个ID必须与复制拓扑中任何其他源或复制副本使用的每个其他ID不同。有关更多信息，请参阅[第17.1.6.2节，“复制源选项和变量”](replication-options-source.html)和[第17.1.6.3节，“副本服务器选项和变量”](replication-options-replica.html).

如果服务器ID设置为0，则会进行二进制日志记录，但服务器ID为0的源拒绝与副本的任何连接，而服务器ID为0的副本拒绝连接到源。请注意，尽管可以将服务器ID动态更改为非零值，但这样做并不能立即启动复制。必须更改服务器ID，然后重新启动服务器以初始化复制副本。

有关更多信息，请参阅[第17.1.2.2节，“设置副本配置”](replication-howto-slavebaseconfig.html).

[](<>) [`服务器_uuid`](replication-options.html#sysvar_server_uuid)

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

MySQL服务器除了在`服务器id`系统变量。这是一个全局只读变量[`服务器_uuid`](replication-options.html#sysvar_server_uuid).

笔记

存在[`服务器_uuid`](replication-options.html#sysvar_server_uuid)系统变量不会更改设置唯一变量的要求[`服务器id`](replication-options.html#sysvar_server_id)每个MySQL服务器的值，作为准备和运行MySQL复制的一部分，如本节前面所述。

| 系统变量 | `[server_uuid]（replication options.html#sysvar_server_uuid）` |
| ---- | ------------------------------------------------------------ |
| 范围 | 全球的 |
| 动态 | 不 |
| [`集_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
| 类型 | 一串 |

启动时，MySQL服务器会自动获取UUID，如下所示：

1.  [](<>)尝试读取并使用文件中写入的UUID`*`数据目录`*/自动。cnf`（在哪里*`数据目录`*是服务器的数据目录）。

2.  如果`*`数据目录`*/自动。cnf`如果找不到，则生成一个新的UUID并将其保存到此文件，必要时创建该文件。

    这个`汽车cnf`文件的格式与用于`我的cnf`或`我的伊尼`文件夹。`汽车cnf`只有一个`[自动]`包含单个[`服务器_uuid`](replication-options.html#sysvar_server_uuid)设置和价值；该文件的内容与此处显示的内容类似：


```
[auto]
server_uuid=8a94f357-aab4-11df-86ab-c80aa9429562
```

重要的

这个`汽车cnf`文件自动生成；请勿尝试写入或修改此文件。

在使用MySQL复制时，源和副本知道彼此的UUID。副本UUID的值可以在[`显示副本`](show-replicas.html)（或MySQL 8.0.22之前的版本，[`显示从主机`](show-slave-hosts.html)).一次[`开始复制`](start-replica.html)已执行，则源的UUID值在的输出中的副本上可用[`显示副本状态`](show-replica-status.html).从8.0.22开始，关键字SLAVE被REPLICA替换。

笔记

签发[`停止复制`](stop-replica.html)或[`重置副本`](reset-replica.html)声明确实如此*不*重置复制副本上使用的源UUID。

服务器的`服务器_uuid`在GTID中也用于该服务器上发起的事务。有关更多信息，请参阅[第17.1.3节，“使用全局事务标识符的复制”](replication-gtids.html).

启动时，复制I/O（接收器）线程会生成一个错误，如果其源的UUID等于自己的UUID，则会中止，除非[`--复制相同的服务器id`](replication-options-replica.html#option_mysqld_replicate-same-server-id)选项已设置。此外，如果以下任一情况为真，复制接收器线程将生成警告：

-   没有来源具有预期的[`服务器_uuid`](replication-options.html#sysvar_server_uuid)存在。

-   消息来源[`服务器_uuid`](replication-options.html#sysvar_server_uuid)改变了，尽管没有[`将复制源更改为`](change-replication-source-to.html) \| [`将主机更改为`](change-master-to.html)声明已经执行过。
