每个副本必须具有唯一的服务器 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
必须同时是源 和 副本。必须由 B
将从 A
收到的更新记录到其二进制日志中,以便传递给 C
。除了二进制日志记录之外,此复制拓扑还要求启用系统变量 log_replica_updates
。启用副本更新后,副本会将从源接收到的更新写入副本自己的二进制日志中,这些更新由副本的 SQL 线程执行。默认情况下启用 log_replica_updates
。
如果您需要在副本上禁用二进制日志记录或副本更新日志记录,则可以通过为副本指定 --skip-log-bin
和 --log-replica-updates=OFF
选项来实现。如果您决定在副本上重新启用这些功能,请删除相关选项并重新启动服务器。