以下部分包含关于 mysqld 选项和服务器变量的信息,这些选项和变量用于复制和控制二进制日志。源和复制服务器的选项和变量单独涵盖,二进制日志记录和全局事务标识符(GTIDs)相关的选项和变量也单独涵盖。还包括一个快速参考表,提供这些选项和变量的基本信息。
特别重要的是 server_id
系统变量。
Command-Line Format | --server-id=# |
---|---|
System Variable | server_id |
Scope | 全局 |
Dynamic | 是 |
SET_VAR Hint Applies |
否 |
Type | 整数 |
Default Value | 1 |
Minimum Value | 0 |
Maximum Value | 4294967295 |
该变量指定服务器 ID。server_id
默认设置为 1。服务器可以使用默认 ID 启动,但当启用二进制日志记录时,如果您没有明确设置 server_id
,将发出信息性消息。
对于用于复制拓扑结构的服务器,您必须为每个复制服务器指定唯一的服务器 ID,范围从 1 到 232 − 1。“唯一” 意味着每个 ID 都必须不同于任何其他 ID,用于拓扑结构中的任何其他源或复制服务器。有关更多信息,请参阅 第 19.1.6.2 节,“复制源选项和变量” 和 第 19.1.6.3 节,“复制服务器选项和变量”。
如果服务器 ID 设置为 0,二进制日志记录将继续,但源服务器 ID 为 0 将拒绝来自复制服务器的任何连接,而复制服务器 ID 为 0 将拒绝连接到源服务器。请注意,虽然您可以动态更改服务器 ID 到非零值,但这样做不会立即启用复制。您必须更改服务器 ID,然后重新启动服务器以初始化复制服务器。
有关更多信息,请参阅 第 19.1.2.2 节,“设置复制配置”。
MySQL 服务器生成一个真正的 UUID,除了默认或用户提供的服务器 ID 设置在 server_id
系统变量中。这可以作为全局、只读变量 server_uuid
。
存在 server_uuid
系统变量不改变为每个 MySQL 服务器设置唯一的 server_id
值的要求,以便准备和运行 MySQL 复制,如本节前面所述。
当 MySQL 服务器启动时,自动获取 UUID,如下所示:
auto.cnf 文件的格式类似于 my.cnf 或 my.ini 文件。auto.cnf 文件只有一个 [auto]
部分,包含一个 服务器UUID
设置和值;文件的内容类似于以下所示:
[auto]
server_uuid=8a94f357-aab4-11df-86ab-c80aa9429562
auto.cnf 文件是自动生成的;请勿尝试写入或修改该文件。
在使用 MySQL 复制时,源和副本知道彼此的 UUID。副本的 UUID 值可以在 SHOW REPLICAS
的输出中看到。执行 START REPLICA
后,源的 UUID 值将在副本的 SHOW REPLICA STATUS
的输出中可用。
发出 STOP REPLICA
或 RESET REPLICA
语句不会重置源的 UUID,如副本所用。
服务器的 服务器UUID
也用于 GTIDs 中的交易,详见 第 19.1.3 节,“使用全局事务标识符的复制”。
当启动时,复制 I/O(receiver)线程如果其源的 UUID 等于自己的 UUID,除非设置了 --replicate-same-server-id
选项,否则将生成错误并中止。此外,复制接收器线程还将生成警告,如果以下任何一个条件为真:
-
没有源具有预期的
服务器UUID
。 -
源的
服务器UUID
已经更改,尽管从未执行过CHANGE REPLICATION SOURCE TO
语句。