Documentation Home

16.1.2.5 设置副本

以下部分描述了如何设置副本。在继续之前,请确保您拥有:

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

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

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;
笔记

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

CHANGE MASTER TO声明还有其他选项。例如,可以使用 SSL 设置安全复制。有关选项的完整列表以及有关字符串值选项的最大允许长度的信息,请参阅第 13.4.2.1 节,“CHANGE MASTER TO 语句”

接下来的步骤取决于您是否有现有数据要导入到副本中。有关详细信息,请参阅 第 16.1.2.4 节,“为数据快照选择方法”。选择以下选项之一:

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

当没有要导入的先前数据库的快照时,将副本配置为从新源开始复制。

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

  1. 启动副本并连接到它。

  2. 执行一条CHANGE MASTER TO 语句来设置源配置。请参阅 第 16.1.2.5.2 节,“在副本上设置源配置”

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

如果您正在设置新服务器,但具有来自要加载到复制配置中的不同服务器的现有数据库转储,也可以使用此方法。通过将数据加载到新源,数据会自动复制到副本。

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

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

使用现有数据设置复制时,在开始复制之前将快照从源传输到副本。将数据导入副本的过程取决于您如何在源上创建数据快照。

按照此过程设置与现有数据的复制:

  1. 使用以下方法之一将数据导入副本:

    1. 如果您使用mysqldump,启动副本服务器,确保复制不会通过使用该 --skip-slave-start 选项启动。然后导入转储文件:

      $> mysql < fulldb.dump
    2. 如果您使用原始数据文件创建了快照,请将数据文件提取到副本的数据目录中。例如:

      $> tar xvf dbdump.tar

      您可能需要设置文件的权限和所有权,以便副本服务器可以访问和修改它们。然后启动副本服务器,确保复制不会通过使用该 --skip-slave-start 选项启动。

  2. 使用来自源的复制坐标配置副本。这告诉副本二进制日志文件和文件中需要开始复制的位置。此外,使用源的登录凭据和主机名配置副本。有关CHANGE MASTER TO所需语句的更多信息,请参阅 第 16.1.2.5.2 节,“在副本上设置源配置”

  3. 启动复制线程:

    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.

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

副本存储有关您在其连接元数据存储库中配置的源的信息。连接元数据存储库可以是文件或表的形式,由为 master_info_repository系统变量设置的值决定。当副本运行时 master_info_repository=FILE,两个文件存储在数据目录中,名为 master.inforelay-log.infomaster_info_repository=TABLE 相反,此信息保存在数据库中的 表 中master_slave_infomysql在任何一种情况下,都 不要删除或编辑文件或表。始终使用CHANGE MASTER TO 更改复制参数的语句。副本可以使用语句中指定的值自动更新状态文件。有关更多信息,请参阅第 16.2.4 节,“中继日志和复制元数据存储库”

笔记

连接元数据存储库的内容会覆盖在命令行或my.cnf. 有关详细信息,请参阅 第 16.1.6 节,“复制和二进制日志记录选项和变量”

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