16.1.2.5 设置副本

以下各节介绍如何设置副本。在 continue 之前,请确保您具有:

mysql> UNLOCK TABLES;
16.1.2.5.1 设置副本配置

每个副本必须具有唯一的服务器 ID,如server_id系统变量所指定。如果要设置多个副本,则每个副本必须具有唯一的server_id值,该值与源副本和其他任何副本的值都不同。如果尚未设置副本服务器的服务器 ID,或者当前值与您为源服务器或其他副本服务器选择的值相冲突,则必须对其进行更改。默认server_id值为 0,副本服务器拒绝连接到源。

您可以通过发出如下语句来动态更改server_id值:

SET GLOBAL server_id = 21;

如果先前已将默认的server_id值设置为 0,则必须重新启动服务器以使用新的非零服务器 ID 初始化副本。否则,更改服务器 ID 时不需要重新启动服务器,除非您进行其他需要它的配置更改。例如,如果在服务器上禁用了二进制日志记录,并且您希望对副本启用二进制日志记录,则需要重新启动服务器才能启用此功能。

如果要关闭副本服务器,则可以编辑配置文件的[mysqld]部分以指定唯一的服务器 ID。例如:

[mysqld]
server-id=21

副本不需要启用二进制日志记录就可以进行复制。但是,副本上的二进制日志记录意味着该副本的二进制日志可用于数据备份和崩溃恢复。启用了二进制日志记录的副本也可以用作更复杂的复制拓扑的一部分。如果要在副本上启用二进制日志记录,请使用配置文件[mysqld]部分中的log-bin选项。需要重新启动服务器才能在以前未使用过的服务器上启动二进制日志记录。

16.1.2.5.2 在副本服务器上设置源配置

要设置副本以与复制源进行通信,请为副本配置必要的连接信息。为此,请在副本上执行以下语句,将选项值替换为与系统相关的实际值:

mysql> CHANGE MASTER TO
    ->     MASTER_HOST='source_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='recorded_log_file_name',
    ->     MASTER_LOG_POS=recorded_log_position;

Note

复制不能使用 Unix 套接字文件。您必须能够使用 TCP/IP 连接到源 MySQL 服务器。

更改为主语句还具有其他选项。例如,可以使用 SSL 设置安全复制。有关选项的完整列 table,以及有关字符串值选项的最大允许长度的信息,请参见第 13.4.2.1 节“将主 table 更改为语句”

下一步取决于您是否有要导入到副本的现有数据。有关更多信息,请参见第 16.1.2.4 节,“选择数据快照的方法”。选择以下选项之一:

16.1.2.5.3 设置新源和副本之间的复制

如果没有要导入的先前数据库的快照,请配置副本以从新源开始复制。

设置源和新副本之间的复制:

在每个副本上执行这些设置步骤。

如果要设置新服务器,但已有要从另一台服务器上加载的数据库的现有转储,并且要加载到复制配置中,则也可以使用此方法。通过将数据加载到新源中,数据将自动复制到副本中。

如果要使用来自其他现有数据库服务器的数据来构建新的复制环境以创建新的源,请在新的源上运行从该服务器生成的转储文件。数据库更新将自动传播到副本:

shell> mysql -h master < fulldb.dump
16.1.2.5.4 使用现有数据设置复制

使用现有数据设置复制时,请在开始复制之前将快照从源转移到副本。将数据导入副本的过程取决于在源上创建数据快照的方式。

选择以下选项之一:

如果您使用了mysqldump

  • 使用--skip-slave-start选项启动副本,以使复制不会开始。

  • 导入转储文件:

shell> mysql < fulldb.dump

如果您使用原始数据文件创建了快照:

  • 将数据文件提取到副本的数据目录中。例如:
shell> tar xvf dbdump.tar

您可能需要在文件上设置权限和所有权,以便副本服务器可以访问和修改它们。

mysql> START SLAVE;

执行完此过程后,副本服务器将连接到源并复制自拍摄快照以来源上发生的所有更新。

如果未正确设置源的server_id系统变量,则副本无法连接到它。同样,如果您没有为副本正确设置server_id,则会在副本的错误日志中得到以下错误:

Warning: You should set server-id to a non-0 value if master_host
is set; we will force server id to 2, but this MySQL server will
not act as a slave.

如果副本由于任何其他原因而无法复制,您还可以在副本的错误日志中找到错误消息。

该副本将有关您已配置的源的信息存储在其源元数据存储库中。源元数据存储库可以采用文件或 table 的形式,这取决于为master_info_repository系统变量设置的值。当副本使用master_info_repository=FILE运行时,两个文件存储在数据目录中,分别名为master.inforelay-log.info。如果为master_info_repository=TABLE,则此信息将保存在mysql数据库的master_slave_infotable 中。无论哪种情况,请不要删除或编辑文件或 table。始终使用更改为主语句更改复制参数。副本可以使用语句中指定的值来自动更新状态文件。有关更多信息,请参见第 16.2.4 节“中继日志和复制应用程序元数据存储库”

Note

源元数据存储库的内容会覆盖在命令行或my.cnf中指定的某些服务器选项。有关更多详细信息,请参见第 16.1.6 节“复制和二进制日志记录选项和变量”

源的单个快照足以满足多个副本的需要。要设置其他副本,请使用相同的源快照,并按照上述过程的副本部分进行操作。