mysql.rds_set_external_master_with_delay
将 RDS for MySQL 数据库实例配置为在 Amazon RDS 外部运行的 MySQL 实例的只读副本并配置延迟复制。
要运行此过程,必须启用 autocommit
。要启用它,请将 autocommit
参数设置为 1
。有关修改参数的信息,请参阅 修改数据库参数组中的参数。
语法
CALL mysql.rds_set_external_master_with_delay ( host_name , host_port , replication_user_name , replication_user_password , mysql_binary_log_file_name , mysql_binary_log_file_location , ssl_encryption , delay );
参数
- host_name
-
在 Amazon RDS 之外运行并将变为源数据库实例的 MySQL 实例的主机名或 IP 地址。
- host_port
-
在 Amazon RDS 之外运行的要配置为源数据库实例的 MySQL 实例使用的端口。如果网络配置包括转换端口号的 SSH 端口复制,则指定由 SSH 公开的端口号。
- replication_user_name
-
对在 Amazon RDS 外部运行的 MySQL 实例具有
REPLICATION CLIENT
和REPLICATION SLAVE
权限的用户的 ID。建议您向专用于复制的账户提供外部实例。 - replication_user_password
-
在
replication_user_name
中指定的用户 ID 的密码。 - mysql_binary_log_file_name
-
源数据库实例上包含复制信息的二进制日志的名称。
- mysql_binary_log_file_location
-
mysql_binary_log_file_name
二进制日志中复制将开始读取复制信息的位置。您可以通过在源数据库实例上运行
SHOW MASTER STATUS
来确定二进制日志文件名和位置。 - ssl_encryption
-
指定是否在复制连接中使用安全套接字层(SSL)加密的值。1 表示使用 SSL 加密,0 表示不使用加密。默认值为 0。
注意 不支持
MASTER_SSL_VERIFY_SERVER_CERT
选项。此选项设置为 0,这意味着连接已加密,但未验证证书。 - delay
-
延迟从源数据库实例复制的最小秒数。
该参数的限制为一天(86400 秒)。
使用说明
主用户必须运行 mysql.rds_set_external_master_with_delay
过程。必须在要配置为在 Amazon RDS 外部运行的 MySQL 实例的只读副本的 MySQL 数据库实例上运行该过程。
运行 mysql.rds_set_external_master_with_delay
之前,您必须先将在 Amazon RDS 之外运行的 MySQL 实例配置为源数据库实例。要连接到在 Amazon RDS 外部运行的 MySQL 实例,您必须指定 replication_user_name
和 replication_user_password
值。这些值必须指示具有外部 MySQL 实例的 REPLICATION CLIENT
和 REPLICATION SLAVE
权限的复制用户。
将 MySQL 的外部实例配置为源数据库实例
通过使用所选的 MySQL 客户端,连接到 MySQL 的外部实例并创建要用于复制的用户账户。以下是示例。
CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
-
对于 MySQL 的外部实例,向复制用户授予
REPLICATION CLIENT
和REPLICATION SLAVE
权限。以下示例为您的域的REPLICATION CLIENT
用户授予所有数据库的REPLICATION SLAVE
和'repl_user'
权限。GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
有关更多信息,请参阅“配置与外部源实例之间的二进制日志文件位置复制”。
我们建议您尽可能使用只读副本管理两个 Amazon RDS 数据库实例之间的复制。在执行该操作时,我们建议您仅使用该存储过程以及其他与复制相关的存储过程。这些做法可以在 Amazon RDS 数据库实例之间实现更复杂的复制拓扑。我们提供这些存储过程主要是为了与在 Amazon RDS 外部运行的 MySQL 实例之间启用复制。有关管理 Amazon RDS 数据库实例之间的复制的信息,请参阅使用只读副本。
在调用 mysql.rds_set_external_master_with_delay
将 Amazon RDS 数据库实例配置为只读副本后,可对该只读副本调用 mysql.rds_start_replication 开始复制过程。您可以调用 mysql.rds_reset_external_master 删除只读副本配置。
在调用 mysql.rds_set_external_master_with_delay
时,Amazon RDS 在 set master
和 mysql.rds_history
表中记录时间、用户和 mysql.rds_replication_status
操作。
对于灾难恢复,您可以将该过程与 mysql.rds_start_replication_until 或 mysql.rds_start_replication_until_gtid 存储过程一起使用。要将延迟只读副本的更改向前滚动到发生灾难之前的时间,您可以运行 mysql.rds_set_external_master_with_delay
过程。在 mysql.rds_start_replication_until
过程停止复制后,您可以通过使用将只读副本提升为独立的数据库实例中的说明将只读副本提升为新的主数据库实例。
要使用 mysql.rds_rds_start_replication_until_gtid
过程,必须启用基于 GTID 的复制。要跳过已知会导致灾难的特定基于 GTID 的事务,您可以使用 mysql.rds_skip_transaction_with_gtid 存储过程。有关使用基于 GTID 的复制的更多信息,请参阅将基于 GTID 的复制用于 Amazon RDS for MySQL。
mysql.rds_set_external_master_with_delay
过程在以下版本的 RDS for MySQL 中可用:
-
MySQL 8.0.26 和更高的 8.0.x 版本
-
所有 5.7 版本
示例
在 MySQL 数据库实例上运行时,下例将该数据库实例配置为在 Amazon RDS 之外运行的某个 MySQL 实例的只读副本。它在 MySQL 数据库实例上将最短复制延迟时间设置为一小时(3600 秒)。在 Amazon RDS 外部运行的 MySQL 源数据库实例的更改在至少一个小时内不会在 MySQL 数据库实例只读副本上应用。
call mysql.rds_set_external_master_with_delay( 'Externaldb.some.com', 3306, 'repl_user', 'SomePassW0rd', 'mysql-bin-changelog.000777', 120, 0, 3600);