Documentation Home
MySQL 8.0 参考手册  / 第十七章复制  / 17.1 配置复制  /  17.1.6 复制和二进制日志选项和变量

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

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

特别重要的是 server_id系统变量。

命令行格式 --server-id=#
系统变量 server_id
范围 全球的
动态的 是的
SET_VAR提示适用
类型 整数
默认值 1
最小值 0
最大值 4294967295

此变量指定服务器 ID。 server_id默认设置为 1。服务器可以使用此默认 ID 启动,但是当启用二进制日志记录时,如果您没有server_id明确设置以指定服务器 ID,则会发出一条信息性消息。

对于在复制拓扑中使用的服务器,您必须为每个复制服务器指定一个唯一的服务器 ID,范围从 1 到 2 32 − 1。 唯一意味着每个 ID 必须不同于每个其他使用的 ID复制拓扑中的任何其他源或副本。有关其他信息,请参阅 第 17.1.6.2 节,“复制源选项和变量”第 17.1.6.3 节,“副本服务器选项和变量”

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

有关详细信息,请参阅 第 17.1.2.2 节,“设置副本配置”

server_uuid

除了在server_id 系统变量中设置的默认或用户提供的服务器 ID 之外,MySQL 服务器还生成一个真正的 UUID。这可用作全局只读变量 server_uuid

笔记

系统变量的存在server_uuid 不会改变server_id为每个 MySQL 服务器设置唯一值的要求,作为准备和运行 MySQL 复制的一部分,如本节前面所述。

系统变量 server_uuid
范围 全球的
动态的
SET_VAR提示适用
类型 细绳

MySQL服务器在启动时会自动获取一个UUID,如下:

  1. 尝试读取并使用文件中写入的 UUID data_dir/auto.cnfdata_dir服务器的数据目录在哪里)。

  2. 如果 data_dir/auto.cnf 未找到,则生成一个新的 UUID 并将其保存到此文件,必要时创建该文件。

auto.cnf文件的格式类似于用于my.cnfmy.ini 文件的格式。auto.cnf只有一个 [auto]部分包含一个 server_uuid设置和值;该文件的内容类似于此处显示的内容:

[auto]
server_uuid=8a94f357-aab4-11df-86ab-c80aa9429562
重要的

auto.cnf文件自动生成 ;不要尝试写入或修改此文件。

使用 MySQL 复制时,源和副本知道彼此的 UUID。副本的 UUID 的值可以在SHOW REPLICAS(或在 MySQL 8.0.22 之前 SHOW SLAVE HOSTS)的输出中看到。START REPLICA执行后,源的 UUID 的值在 的输出中的副本上 SHOW REPLICA STATUS可用。 从 8.0.22 开始,关键字 SLAVE 被 REPLICA 取代。

笔记

发出STOP REPLICAor RESET REPLICA语句不会重置副本上使用的源 UUID。

服务器的server_uuid也在 GTID 中用于源自该服务器的事务。有关详细信息,请参阅第 17.1.3 节,“使用全局事务标识符进行复制”

启动时,复制 I/O(接收方)线程会生成错误并中止,如果其源的 UUID 等于它自己的 UUID,除非--replicate-same-server-id 已设置该选项。此外,如果以下任一情况为真,复制接收器线程会生成警告: