每个副本都必须有一个唯一的服务器 ID,由
server_id
系统变量指定。如果要设置多个副本,则每个副本都必须具有server_id
与源和任何其他副本不同的唯一值。如果副本的服务器 ID 尚未设置,或者当前值与您为源或另一个副本选择的值冲突,则必须更改它。
默认server_id
值为 1。您可以server_id
通过发出如下语句动态更改该值:
SET GLOBAL server_id = 21;
请注意,服务器 ID 的值为 0 会阻止副本连接到源。如果之前设置了该服务器 ID 值(这是早期版本中的默认值),则必须重新启动服务器以使用新的非零服务器 ID 初始化副本。否则,更改服务器 ID 时不需要重新启动服务器,除非您进行其他需要重新启动的配置更改。例如,如果在服务器上禁用了二进制日志记录,而您希望为您的副本启用它,则需要重新启动服务器才能启用它。
如果要关闭副本服务器,则可以编辑
[mysqld]
配置文件部分以指定唯一的服务器 ID。例如:
[mysqld]
server-id=21
二进制日志记录在所有服务器上默认启用。副本不需要启用二进制日志记录来进行复制。但是,副本上的二进制日志意味着副本的二进制日志可用于数据备份和崩溃恢复。启用了二进制日志记录的副本也可以用作更复杂的复制拓扑的一部分。例如,您可能希望使用这种链式安排来设置复制服务器:
A -> B -> C
在这里,A
作为副本的来源
B
,并B
作为副本的来源C
。为此,
B
必须既是来源
又是副本。从 收到的更新
A
必须记录B
到它的二进制日志中,以便传递给
C
. 除了二进制日志记录之外,此复制拓扑还需要启用系统变量
log_replica_updates
(从 MySQL 8.0.26 开始)或log_slave_updates
(在 MySQL 8.0.26 之前)。启用副本更新后,副本将从源接收并由副本的 SQL 线程执行的更新写入副本自己的二进制日志。这
log_replica_updates
或
log_slave_updates
系统变量默认启用。
如果您需要在副本上禁用二进制日志记录或副本更新日志记录,您可以通过为副本指定
--skip-log-bin
和--log-replica-updates=OFF
或
--log-slave-updates=OFF
选项来实现。如果您决定在副本上重新启用这些功能,请删除相关选项并重新启动服务器。