19.1.6 复制和二进制日志记录选项和变量
以下部分包含了mysqld选项和服务器变量,用于复制和二进制日志记录。源和副本服务器的选项和变量单独介绍,二进制日志记录和全局事务 ID 也单独介绍。快速参考表提供了这些选项和变量的基本信息。
特别重要的是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复制,如前面在本节中描述的那样。
System Variable |
|
---|---|
Scope | 全局 |
Dynamic | 否 |
SET_VAR Hint Applies |
否 |
Type | 字符串 |
当启动时,MySQL服务器将自动获取UUID如下:
auto.cnf
文件的格式类似于my.cnf
或my.ini
文件。auto.cnf
文件只有一个[auto]
部分,包含一个server_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 在副本上重置。
服务器的 server_uuid
也用于 GTIDs 中的事务,来自该服务器的交易。更多信息,请见 第19.1.3节,“使用全局事务标识符进行复制”。
在启动时,复制 I/O (接收器) 线程如果其源的 UUID 等于自己的 UUID,就会生成错误并中止,除非设置了 --replicate-same-server-id
选项。此外,复制接收器线程还会生成警告,如果满足以下任意一个条件:
-
没有预期的
server_uuid
的源存在。 -
源的
server_uuid
已经改变,但从未执行过CHANGE REPLICATION SOURCE TO
语句。