配置、启动和停止二进制日志(binlog)复制
您可以在连接到 Aurora MySQL 集群中的主实例时,调用以下存储过程。这些过程控制事务如何从外部数据库复制到 Aurora MySQL,或从 Aurora MySQL 复制到外部数据库。
主题
- mysql.rds_disable_session_binlog(Aurora MySQL 版本 2)
- mysql.rds_enable_session_binlog(Aurora MySQL 版本 2)
- mysql.rds_import_binlog_ssl_material
- mysql.rds_next_master_log(Aurora MySQL 版本 2)
- mysql.rds_next_source_log(Aurora MySQL 版本 3)
- mysql.rds_remove_binlog_ssl_material
- mysql.rds_reset_external_master(Aurora MySQL 版本 2)
- mysql.rds_reset_external_source(Aurora MySQL 版本 3)
- mysql.rds_set_binlog_source_ssl(Aurora MySQL 版本 3)
- mysql.rds_set_external_master(Aurora MySQL 版本 2)
- mysql.rds_set_external_master_with_auto_position(Aurora MySQL 版本 2)
- mysql.rds_set_external_source(Aurora MySQL 版本 3)
- mysql.rds_set_external_source_with_auto_position(Aurora MySQL 版本 3)
- mysql.rds_set_master_auto_position(Aurora MySQL 版本 2)
- mysql.rds_set_read_only(Aurora MySQL 版本 3)
- mysql.rds_set_session_binlog_format(Aurora MySQL 版本 2)
- mysql.rds_set_source_auto_position(Aurora MySQL 版本 3)
- mysql.rds_skip_repl_error
- mysql.rds_start_replication
- mysql.rds_start_replication_until(Aurora MySQL 版本 3)
- mysql.rds_stop_replication
mysql.rds_disable_session_binlog(Aurora MySQL 版本 2)
通过将 sql_log_bin
变量设置为 OFF
来关闭当前会话的二进制日志记录。
语法
CALL mysql.rds_disable_session_binlog;
参数
无
使用说明
对于 Aurora MySQL 数据库集群,您将在连接到主实例时调用此存储过程。
对于 Aurora,Aurora MySQL 版本 2.12 及更高的与 MySQL 5.7 兼容的版本支持此过程。
注意
在 Aurora MySQL 版本 3 中,如果您具有 SESSION_VARIABLES_ADMIN
权限,则可以使用以下命令禁用当前会话的二进制日志记录:
SET SESSION sql_log_bin = OFF;
mysql.rds_enable_session_binlog(Aurora MySQL 版本 2)
通过将 sql_log_bin
变量设置为 ON
来开启当前会话的二进制日志记录。
语法
CALL mysql.rds_enable_session_binlog;
参数
无
使用说明
对于 Aurora MySQL 数据库集群,您将在连接到主实例时调用此存储过程。
对于 Aurora,Aurora MySQL 版本 2.12 及更高的与 MySQL 5.7 兼容的版本支持此过程。
注意
在 Aurora MySQL 版本 3 中,如果您具有 SESSION_VARIABLES_ADMIN
权限,则可以使用以下命令启用当前会话的二进制日志记录:
SET SESSION sql_log_bin = ON;
mysql.rds_import_binlog_ssl_material
将证书颁发机构证书、客户端证书和客户端密钥导入到 Aurora MySQL 数据库集群中。SSL 通信和加密复制需要此类信息。
注意
目前,Aurora MySQL 版本 2(2.09.2、2.10.0、2.10.1 和 2.11.0)以及版本 3(3.01.1 及更高版本)支持此过程。
语法
CALL mysql.rds_import_binlog_ssl_material (
ssl_material
);
参数
-
ssl_material
-
包含 MySQL 客户端的以下 .pem 格式文件内容的 JSON 负载:
-
"ssl_ca":"
证书颁发机构证书
" -
"ssl_cert":"
客户端证书
" -
"ssl_key":"
客户端密钥
"
-
使用说明
在运行该过程之前,为加密复制做好以下准备:
-
如果您没有在外部 MySQL 源数据库实例上启用 SSL,并且没有准备客户端密钥和客户端证书,请在 MySQL 数据库服务器上启用 SSL 并生成所需的客户端密钥和客户端证书。
-
如果在外部源数据库实例上启用了 SSL,请提供 Aurora MySQL 数据库集群的客户端密钥和证书。如果未提供,请为 Aurora MySQL 数据库集群生成新密钥和证书。要对客户端证书进行签名,您必须拥有您用来在外部 MySQL 源数据库实例上配置 SSL 的证书颁发机构密钥。
有关更多信息,请参阅 MySQL 文档中的使用 openssl 创建 SSL 证书和密钥
重要
为加密复制做好准备后,使用 SSL 连接来运行该过程。不得通过不安全的连接传输客户端密钥。
该过程会将 SSL 信息从外部 MySQL 数据库导入到 Aurora MySQL 数据库集群中。SSL 信息是 .pem 格式文件,其中包含 Aurora MySQL 数据库集群的 SSL 信息。在加密复制期间,Aurora MySQL 数据库集群充当 MySQL 数据库服务器的客户端。Aurora MySQL 客户端的证书和密钥必须是 .pem 格式的文件。
您可以将这些文件中的信息复制到正确 JSON 负载的 ssl_material
参数中。要支持加密复制,请将此类 SSL 信息导入到 Aurora MySQL 数据库集群中。
JSON 负载必须为以下格式。
'{"ssl_ca":"-----BEGIN CERTIFICATE-----
ssl_ca_pem_body_code
-----END CERTIFICATE-----\n","ssl_cert":"-----BEGIN CERTIFICATE-----ssl_cert_pem_body_code
-----END CERTIFICATE-----\n","ssl_key":"-----BEGIN RSA PRIVATE KEY-----ssl_key_pem_body_code
-----END RSA PRIVATE KEY-----\n"}'
示例
以下示例将 SSL 信息导入到 Aurora MySQL。在 .pem 格式文件中,主体代码通常比示例中显示的主体代码长。
call mysql.rds_import_binlog_ssl_material( '{"ssl_ca":"-----BEGIN CERTIFICATE----- AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V hz2ItxCih PnDSUaw WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk 0FzZ qaeJAAHco CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0 FmUZofz221CBt5IMucxXPkX4rWi z7wB3Rb BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE -----END CERTIFICATE-----\n","ssl_cert":"-----BEGIN CERTIFICATE----- AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V hz2ItxCih PnDSUaw WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk 0FzZ qaeJAAHco CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0 FmUZofz221CBt5IMucxXPkX4rWi z7wB3Rb BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE -----END CERTIFICATE-----\n","ssl_key":"-----BEGIN RSA PRIVATE KEY----- AAAAB3NzaC1yc2EAAAADAQABAAABAQClKsfkNkuSevGj3eYhCe53pcjqP3maAhDFcvBS7O6V hz2ItxCih PnDSUaw WNQn/mZphTk/a/gU8jEzoOWbkM4yxyb/wB96xbiFveSFJuOp/d6RJhJOI0iBXr lsLnBItntckiJ7FbtxJMXLvvwJryDUilBMTjYtwB QhYXUMOzce5Pjz5/i8SeJtjnV3iAoG/cQk 0FzZ qaeJAAHco CY/5WrUBkrHmFJr6HcXkvJdWPkYQS3xqC0 FmUZofz221CBt5IMucxXPkX4rWi z7wB3Rb BQoQzd8v7yeb7OzlPnWOyN0qFU0XA246RA8QFYiCNYwI3f05p6KLxEXAMPLE -----END RSA PRIVATE KEY-----\n"}');
mysql.rds_next_master_log(Aurora MySQL 版本 2)
将源数据库实例日志位置更改为源数据库实例上的下一个二进制日志的开始位置。只有在只读副本上收到复制 I/O 错误 1236 时,才能使用该过程。
语法
CALL mysql.rds_next_master_log(
curr_master_log
);
参数
-
curr_master_log
-
当前主日志文件的索引。例如,如果当前文件名为
mysql-bin-changelog.012345
,则索引为 12345。若要确定当前主日志文件名,请运行SHOW REPLICA STATUS
命令并查看Master_Log_File
字段。注意
以前的 MySQL 版本使用的是
SHOW SLAVE STATUS
,而不是SHOW REPLICA STATUS
。如果您使用的 MySQL 版本低于 8.0.23,那么请使用SHOW SLAVE STATUS
。
使用说明
主用户必须运行 mysql.rds_next_master_log
过程。
警告
仅在对作为复制源的多可用区数据库实例进行故障转移后复制失败,并且 mysql.rds_next_master_log
的 Last_IO_Errno
字段报告 I/O 错误 1236 时调用 SHOW REPLICA STATUS
。
如果在发生失效转移事件之前,源实例中的事务未写入到磁盘上的二进制日志,调用 mysql.rds_next_master_log
可能会导致只读副本丢失数据。
示例
假设复制在 Aurora MySQL 只读副本上失败。对只读副本运行 SHOW REPLICA STATUS\G
会返回以下结果:
*************************** 1. row *************************** Replica_IO_State: Source_Host: myhost.XXXXXXXXXXXXXXX.rr-rrrr-1.rds.amazonaws.com Source_User: MasterUser Source_Port: 3306 Connect_Retry: 10 Source_Log_File: mysql-bin-changelog.012345 Read_Source_Log_Pos: 1219393 Relay_Log_File: relaylog.012340 Relay_Log_Pos: 30223388 Relay_Source_Log_File: mysql-bin-changelog.012345 Replica_IO_Running: No Replica_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Source_Log_Pos: 30223232 Relay_Log_Space: 5248928866 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Source_SSL_Allowed: No Source_SSL_CA_File: Source_SSL_CA_Path: Source_SSL_Cert: Source_SSL_Cipher: Source_SSL_Key: Seconds_Behind_Master: NULL Source_SSL_Verify_Server_Cert: No Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin-changelog.013406' at 1219393, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4.' Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Source_Server_Id: 67285976
Last_IO_Errno
字段显示该实例收到 I/O 错误 1236。Master_Log_File
字段显示文件名为 mysql-bin-changelog.012345
,这意味着日志文件索引为 12345
。要纠正该错误,您可以使用以下参数调用 mysql.rds_next_master_log
:
CALL mysql.rds_next_master_log(12345);
注意
以前的 MySQL 版本使用的是 SHOW SLAVE STATUS
,而不是 SHOW REPLICA STATUS
。如果您使用的 MySQL 版本低于 8.0.23,那么请使用 SHOW SLAVE STATUS
。
mysql.rds_next_source_log(Aurora MySQL 版本 3)
将源数据库实例日志位置更改为源数据库实例上的下一个二进制日志的开始位置。只有在只读副本上收到复制 I/O 错误 1236 时,才能使用该过程。
语法
CALL mysql.rds_next_source_log(
curr_source_log
);
参数
-
curr_source_log
-
当前源日志文件的索引。例如,如果当前文件名为
mysql-bin-changelog.012345
,则索引为 12345。要确定当前源日志文件名,请运行SHOW REPLICA STATUS
命令并查看Source_Log_File
字段。
使用说明
主用户必须运行 mysql.rds_next_source_log
过程。
警告
仅在对作为复制源的多可用区数据库实例进行故障转移后复制失败,并且 mysql.rds_next_source_log
的 Last_IO_Errno
字段报告 I/O 错误 1236 时调用 SHOW REPLICA STATUS
。
如果在发生失效转移事件之前,源实例中的事务未写入到磁盘上的二进制日志,调用 mysql.rds_next_source_log
可能会导致只读副本丢失数据。
示例
假设复制在 Aurora MySQL 只读副本上失败。对只读副本运行 SHOW REPLICA STATUS\G
会返回以下结果:
*************************** 1. row *************************** Replica_IO_State: Source_Host: myhost.XXXXXXXXXXXXXXX.rr-rrrr-1.rds.amazonaws.com Source_User: MasterUser Source_Port: 3306 Connect_Retry: 10 Source_Log_File: mysql-bin-changelog.012345 Read_Source_Log_Pos: 1219393 Relay_Log_File: relaylog.012340 Relay_Log_Pos: 30223388 Relay_Source_Log_File: mysql-bin-changelog.012345 Replica_IO_Running: No Replica_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Source_Log_Pos: 30223232 Relay_Log_Space: 5248928866 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Source_SSL_Allowed: No Source_SSL_CA_File: Source_SSL_CA_Path: Source_SSL_Cert: Source_SSL_Cipher: Source_SSL_Key: Seconds_Behind_Source: NULL Source_SSL_Verify_Server_Cert: No Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from source when reading data from binary log: 'Client requested source to start replication from impossible position; the first event 'mysql-bin-changelog.013406' at 1219393, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.012345' at 4.' Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Source_Server_Id: 67285976
Last_IO_Errno
字段显示该实例收到 I/O 错误 1236。Source_Log_File
字段显示文件名为 mysql-bin-changelog.012345
,这意味着日志文件索引为 12345
。要纠正该错误,您可以使用以下参数调用 mysql.rds_next_source_log
:
CALL mysql.rds_next_source_log(12345);
mysql.rds_remove_binlog_ssl_material
删除用于 SSL 通信和加密复制的证书颁发机构证书、客户端证书与客户端密钥。此类信息可通过使用 mysql.rds_import_binlog_ssl_material 来导入。
语法
CALL mysql.rds_remove_binlog_ssl_material;
mysql.rds_reset_external_master(Aurora MySQL 版本 2)
重新配置 Aurora MySQL 数据库实例,使其不再是在 Amazon RDS 之外运行的某个 MySQL 实例的只读副本。
重要
要运行此过程,必须启用 autocommit
。要启用它,请将 autocommit
参数设置为 1
。有关修改参数的信息,请参阅 在 Amazon Aurora 中修改数据库参数组中的参数。
语法
CALL mysql.rds_reset_external_master;
使用说明
主用户必须运行 mysql.rds_reset_external_master
过程。此过程必须运行于一个 MySQL 数据库实例上,后者要作为在 Amazon RDS 之外运行的 MySQL 实例的只读副本而被删除。
注意
我们提供这些存储过程主要是为了与在 Amazon RDS 外部运行的 MySQL 实例之间启用复制。我们建议您尽可能使用 Aurora 副本来管理 Aurora MySQL 数据库集群中的复制。有关在 Aurora MySQL 数据库集群中管理复制的信息,请参阅 使用 Aurora 副本。
想要了解更多有关使用复制从在 Aurora MySQL 之外运行的 MySQL 实例导入数据的信息,请参阅Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制(二进制日志复制)。
mysql.rds_reset_external_source(Aurora MySQL 版本 3)
重新配置 Aurora MySQL 数据库实例,使其不再是在 Amazon RDS 之外运行的某个 MySQL 实例的只读副本。
重要
要运行此过程,必须启用 autocommit
。要启用它,请将 autocommit
参数设置为 1
。有关修改参数的信息,请参阅 在 Amazon Aurora 中修改数据库参数组中的参数。
语法
CALL mysql.rds_reset_external_source;
使用说明
主用户必须运行 mysql.rds_reset_external_source
过程。此过程必须运行于一个 MySQL 数据库实例上,后者要作为在 Amazon RDS 之外运行的 MySQL 实例的只读副本而被删除。
注意
我们提供这些存储过程主要是为了与在 Amazon RDS 外部运行的 MySQL 实例之间启用复制。我们建议您尽可能使用 Aurora 副本来管理 Aurora MySQL 数据库集群中的复制。有关在 Aurora MySQL 数据库集群中管理复制的信息,请参阅 使用 Aurora 副本。
mysql.rds_set_binlog_source_ssl(Aurora MySQL 版本 3)
为二进制日志复制启用 SOURCE_SSL
加密。有关更多信息,请参阅 MySQL 文档中的 CHANGE REPLICATION SOURCE TO statement
语法
CALL mysql.rds_set_binlog_source_ssl(
mode
);
参数
mode
-
指示是否启用
SOURCE_SSL
加密的值:-
0
–SOURCE_SSL
加密已禁用。默认为0
。 -
1
–SOURCE_SSL
加密已启用。您可以使用 SSL 或 TLS 配置加密。
-
使用说明
Aurora MySQL 版本 3.06 及更高版本支持该过程。
mysql.rds_set_external_master(Aurora MySQL 版本 2)
将 Aurora MySQL 数据库实例配置为在 Amazon RDS 之外运行的 MySQL 实例的只读副本。
mysql.rds_set_external_master
过程已弃用,并会在将来的版本中删除。请改用 mysql.rds_set_external_source
。
重要
要运行此过程,必须启用 autocommit
。要启用它,请将 autocommit
参数设置为 1
。有关修改参数的信息,请参阅 在 Amazon Aurora 中修改数据库参数组中的参数。
语法
CALL mysql.rds_set_external_master (
host_name
,host_port
,replication_user_name
,replication_user_password
,mysql_binary_log_file_name
,mysql_binary_log_file_location
,ssl_encryption
);
参数
-
host_name
-
在 Amazon RDS 之外运行以变为源数据库实例的 MySQL 实例的主机名或 IP 地址。
-
host_port
-
在 Amazon RDS 之外运行的要配置为源数据库实例的 MySQL 实例使用的端口。如果网络配置包括转换端口号的安全 Shell (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,这意味着连接已加密,但未验证证书。
使用说明
主用户必须运行 mysql.rds_set_external_master
过程。必须在要配置为在 Amazon RDS 外部运行的 MySQL 实例的只读副本的 MySQL 数据库实例上运行该过程。
运行 mysql.rds_set_external_master
之前,您必须先将在 Amazon RDS 之外运行的 MySQL 实例配置为源数据库实例。要连接到在 Amazon RDS 之外运行的 MySQL 实例,您必须指定 replication_user_name
和 replication_user_password
值,这些值指示对 MySQL 的外部实例具有 REPLICATION CLIENT
和 REPLICATION SLAVE
权限的复制用户。
将 MySQL 的外部实例配置为源数据库实例
通过使用所选的 MySQL 客户端,连接到 MySQL 的外部实例并创建要用于复制的用户账户。示例如下:
MySQL 5.7
CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY '
password
';MySQL 8.0
CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED WITH mysql_native_password BY '
password
';注意
作为安全最佳实践,请指定除此处所示提示以外的密码。
-
对于 MySQL 的外部实例,向复制用户授予
REPLICATION CLIENT
和REPLICATION SLAVE
权限。以下示例向您所在域的“repl_user”用户授予对所有数据库的REPLICATION CLIENT
和REPLICATION SLAVE
权限。MySQL 5.7
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY '
password
';MySQL 8.0
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
要使用加密复制,请将源数据库实例配置为使用 SSL 连接。此外,使用 mysql.rds_import_binlog_ssl_material 过程,将证书颁发机构证书、客户端证书和客户端密钥导入到数据库实例或数据库集群中。
注意
我们提供这些存储过程主要是为了与在 Amazon RDS 外部运行的 MySQL 实例之间启用复制。我们建议您尽可能使用 Aurora 副本来管理 Aurora MySQL 数据库集群中的复制。有关在 Aurora MySQL 数据库集群中管理复制的信息,请参阅 使用 Aurora 副本。
在调用 mysql.rds_set_external_master
将 Amazon RDS 数据库实例配置为只读副本后,可对该只读副本调用 mysql.rds_start_replication 开始复制过程。您可以调用 mysql.rds_reset_external_master(Aurora MySQL 版本 2) 删除只读副本配置。
调用 mysql.rds_set_external_master
时,Amazon RDS 将时间、用户和 set master
的操作记录在 mysql.rds_history
和 mysql.rds_replication_status
表中。
示例
在 MySQL 数据库实例上运行时,下例将该数据库实例配置为在 Amazon RDS 之外运行的某个 MySQL 实例的只读副本。
call mysql.rds_set_external_master( 'Externaldb.some.com', 3306, 'repl_user', '
password
', 'mysql-bin-changelog.0777', 120, 0);
mysql.rds_set_external_master_with_auto_position(Aurora MySQL 版本 2)
将 Aurora MySQL 主实例配置为接受来自外部 MySQL 实例的传入复制。此过程还会根据全局事务标识符 (GTID) 配置复制。
此过程不会配置延迟复制,因为 Aurora MySQL 不支持延迟复制。
语法
CALL mysql.rds_set_external_master_with_auto_position (
host_name
,host_port
,replication_user_name
,replication_user_password
,ssl_encryption
);
参数
host_name
-
在 Aurora 之外运行以变为复制源的 MySQL 实例的主机名或 IP 地址。
host_port
-
在 Aurora 之外运行的要配置为复制源的 MySQL 实例使用的端口。如果网络配置包括转换端口号的安全 Shell (SSH) 端口复制,请指定由 SSH 公开的端口号。
replication_user_name
-
在对 Aurora 外部运行的 MySQL 实例上具有
REPLICATION CLIENT
和REPLICATION SLAVE
权限的用户的 ID。建议您向专用于复制的账户提供外部实例。 replication_user_password
-
在
replication_user_name
中指定的用户 ID 的密码。 ssl_encryption
-
目前未实施该选项。默认值是 0。
使用说明
对于 Aurora MySQL 数据库集群,您将在连接到主实例时调用此存储过程。
主用户必须运行 mysql.rds_set_external_master_with_auto_position
过程。主用户在充当复制目标的 Aurora MySQL 数据库集群的主实例上运行此过程。这可能是外部 MySQL 数据库实例或 Aurora MySQL 数据库集群的复制目标。
Aurora MySQL 版本 2 支持该过程。对于 Aurora MySQL 版本 3,请改为使用程序 mysql.rds_set_external_source_with_auto_position(Aurora MySQL 版本 3)。
在运行 mysql.rds_set_external_master_with_auto_position
前,请将外部 MySQL 数据库实例配置为复制源。要连接到外部 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'
在调用 mysql.rds_set_external_master_with_auto_position
时,Amazon RDS 将记录某些信息。这些信息包括 "set master"
和 mysql.rds_history
表中的时间、用户和 mysql.rds_replication_status
操作。
要跳过已知会导致问题的基于 GTID 的特定事务,您可以使用 mysql.rds_skip_transaction_with_gtid(Aurora MySQL 版本 2 和 3) 存储过程。有关使用基于 GTID 的复制的更多信息,请参阅使用基于 GTID 的复制。
示例
在 Aurora 主实例上运行时,以下示例将 Aurora 集群配置为充当在 Aurora 之外运行的某个 MySQL 实例的只读副本。
call mysql.rds_set_external_master_with_auto_position( 'Externaldb.some.com', 3306, 'repl_user'@'mydomain.com', 'SomePassW0rd');
mysql.rds_set_external_source(Aurora MySQL 版本 3)
将 Aurora MySQL 数据库实例配置为在 Amazon RDS 外部运行的 MySQL 实例的只读副本。
重要
要运行此过程,必须启用 autocommit
。要启用它,请将 autocommit
参数设置为 1
。有关修改参数的信息,请参阅 在 Amazon Aurora 中修改数据库参数组中的参数。
语法
CALL mysql.rds_set_external_source (
host_name
,host_port
,replication_user_name
,replication_user_password
,mysql_binary_log_file_name
,mysql_binary_log_file_location
,ssl_encryption
);
参数
-
host_name
-
在 Amazon RDS 之外运行以变为源数据库实例的 MySQL 实例的主机名或 IP 地址。
-
host_port
-
在 Amazon RDS 之外运行的要配置为源数据库实例的 MySQL 实例使用的端口。如果网络配置包括转换端口号的安全 Shell (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。
注意
要启用此选项,您必须已使用 mysql.rds_import_binlog_ssl_material 导入自定义 SSL 证书。如果您尚未导入自定义 SSL 证书,请将此参数设置为 0,然后使用 mysql.rds_set_binlog_source_ssl(Aurora MySQL 版本 3)启用 SSL 以进行二进制日志复制。
不支持
MASTER_SSL_VERIFY_SERVER_CERT
选项。此选项设置为 0,这意味着连接已加密,但未验证证书。
使用说明
主用户必须运行 mysql.rds_set_external_source
过程。该过程必须在以下 Aurora MySQL 数据库实例上运行:也即,该实例将配置为在 Amazon RDS 外部运行的 MySQL 实例的只读副本。
运行 mysql.rds_set_external_source
之前,您必须先将在 Amazon RDS 之外运行的 MySQL 实例配置为源数据库实例。要连接到在 Amazon RDS 之外运行的 MySQL 实例,您必须指定 replication_user_name
和 replication_user_password
值,这些值指示对 MySQL 的外部实例具有 REPLICATION CLIENT
和 REPLICATION SLAVE
权限的复制用户。
将 MySQL 的外部实例配置为源数据库实例
-
通过使用所选的 MySQL 客户端,连接到 MySQL 的外部实例并创建要用于复制的用户账户。示例如下:
MySQL 5.7
CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY '
password
';MySQL 8.0
CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED WITH mysql_native_password BY '
password
';注意
作为安全最佳实践,请指定除此处所示提示以外的密码。
-
对于 MySQL 的外部实例,向复制用户授予
REPLICATION CLIENT
和REPLICATION SLAVE
权限。以下示例向您所在域的“repl_user”用户授予对所有数据库的REPLICATION CLIENT
和REPLICATION SLAVE
权限。MySQL 5.7
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY '
password
';MySQL 8.0
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
要使用加密复制,请将源数据库实例配置为使用 SSL 连接。此外,使用 mysql.rds_import_binlog_ssl_material 过程,将证书颁发机构证书、客户端证书和客户端密钥导入到数据库实例或数据库集群中。
注意
我们提供这些存储过程主要是为了与在 Amazon RDS 外部运行的 MySQL 实例之间启用复制。我们建议您尽可能使用 Aurora 副本来管理 Aurora MySQL 数据库集群中的复制。有关在 Aurora MySQL 数据库集群中管理复制的信息,请参阅 使用 Aurora 副本。
在调用 mysql.rds_set_external_source
将 Aurora MySQL 数据库实例配置为只读副本后,可对该只读副本调用 mysql.rds_start_replication 以开始复制过程。您可以调用 mysql.rds_reset_external_source 以删除只读副本配置。
调用 mysql.rds_set_external_source
时,Amazon RDS 将时间、用户和 set
master
的操作记录在 mysql.rds_history
和 mysql.rds_replication_status
表中。
示例
在 Aurora MySQL 数据库实例上运行时,以下示例将该数据库实例配置为在 Amazon RDS 外部运行的某个 MySQL 实例的只读副本。
call mysql.rds_set_external_source( 'Externaldb.some.com', 3306, 'repl_user', '
password
', 'mysql-bin-changelog.0777', 120, 0);
mysql.rds_set_external_source_with_auto_position(Aurora MySQL 版本 3)
将 Aurora MySQL 主实例配置为接受来自外部 MySQL 实例的传入复制。此过程还会根据全局事务标识符 (GTID) 配置复制。
语法
CALL mysql.rds_set_external_source_with_auto_position (
host_name
,host_port
,replication_user_name
,replication_user_password
,ssl_encryption
);
参数
host_name
-
在 Aurora 之外运行以变为复制源的 MySQL 实例的主机名或 IP 地址。
host_port
-
在 Aurora 之外运行的要配置为复制源的 MySQL 实例使用的端口。如果网络配置包括转换端口号的安全 Shell (SSH) 端口复制,请指定由 SSH 公开的端口号。
replication_user_name
-
在对 Aurora 外部运行的 MySQL 实例上具有
REPLICATION CLIENT
和REPLICATION SLAVE
权限的用户的 ID。建议您向专用于复制的账户提供外部实例。 replication_user_password
-
在
replication_user_name
中指定的用户 ID 的密码。 ssl_encryption
-
目前未实施该选项。默认值是 0。
注意
使用 mysql.rds_set_binlog_source_ssl(Aurora MySQL 版本 3)启用 SSL 以进行二进制日志复制。
使用说明
对于 Aurora MySQL 数据库集群,您将在连接到主实例时调用此存储过程。
管理用户必须运行 mysql.rds_set_external_source_with_auto_position
过程。管理用户在充当复制目标的 Aurora MySQL 数据库集群的主实例上运行此过程。这可能是外部 MySQL 数据库实例或 Aurora MySQL 数据库集群的复制目标。
仅 Aurora MySQL 版本 3 支持该过程。此过程不会配置延迟复制,因为 Aurora MySQL 不支持延迟复制。
在运行 mysql.rds_set_external_source_with_auto_position
前,请将外部 MySQL 数据库实例配置为复制源。要连接到外部 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'
在调用 mysql.rds_set_external_source_with_auto_position
时,Amazon RDS 将记录某些信息。这些信息包括 "set master"
和 mysql.rds_history
表中的时间、用户和 mysql.rds_replication_status
操作。
要跳过已知会导致问题的基于 GTID 的特定事务,您可以使用 mysql.rds_skip_transaction_with_gtid(Aurora MySQL 版本 2 和 3) 存储过程。有关使用基于 GTID 的复制的更多信息,请参阅使用基于 GTID 的复制。
示例
在 Aurora 主实例上运行时,以下示例将 Aurora 集群配置为充当在 Aurora 之外运行的某个 MySQL 实例的只读副本。
call mysql.rds_set_external_source_with_auto_position( 'Externaldb.some.com', 3306, 'repl_user'@'mydomain.com', 'SomePassW0rd');
mysql.rds_set_master_auto_position(Aurora MySQL 版本 2)
将复制模式设置为基于二进制日志文件位置或全局事务标识符 (GTID)。
语法
CALL mysql.rds_set_master_auto_position (
auto_position_mode
);
参数
-
auto_position_mode
-
该值指示是使用日志文件位置复制还是基于 GTID 的复制:
-
0
– 使用基于二进制日志文件位置的复制方法。默认为0
。 -
1
– 使用基于 GTID 的复制方法。
-
使用说明
主用户必须运行 mysql.rds_set_master_auto_position
过程。
Aurora MySQL 版本 2 支持该过程。
mysql.rds_set_read_only(Aurora MySQL 版本 3)
为数据库实例全局开启或关闭 read_only
模式。
语法
CALL mysql.rds_set_read_only(
mode
);
参数
mode
-
指示是否为数据库实例全局启用
read_only
模式的值:-
0
–OFF
。默认值为0
。 -
1
–ON
-
使用说明
mysql.rds_set_read_only
存储过程仅修改 read_only
参数。无法在读取器数据库实例上更改 innodb_read_only
参数。
read_only
参数更改在重启时不会保留。要对 read_only
进行永久更改,必须使用 read_only
数据库集群参数。
Aurora MySQL 版本 3.06 及更高版本支持该过程。
mysql.rds_set_session_binlog_format(Aurora MySQL 版本 2)
设置当前会话的二进制日志格式。
语法
CALL mysql.rds_set_session_binlog_format(
format
);
参数
format
-
一个表示当前会话的二进制日志格式的值:
-
STATEMENT
– 复制源基于 SQL 语句将事件写入二进制日志。 -
ROW
– 复制源将事件写入二进制日志,指示各个表行发生更改。 -
MIXED
– 日志记录通常基于 SQL 语句,但在某些条件下切换到行。有关更多信息,请参阅 MySQL 文档中的混合二进制日志记录格式。
-
使用说明
对于 Aurora MySQL 数据库集群,您将在连接到主实例时调用此存储过程。
要使用此存储过程,必须为当前会话配置二进制日志记录。
对于 Aurora,Aurora MySQL 版本 2.12 及更高的与 MySQL 5.7 兼容的版本支持此过程。
mysql.rds_set_source_auto_position(Aurora MySQL 版本 3)
将复制模式设置为基于二进制日志文件位置或全局事务标识符 (GTID)。
语法
CALL mysql.rds_set_source_auto_position (
auto_position_mode
);
参数
auto_position_mode
-
该值指示是使用日志文件位置复制还是基于 GTID 的复制:
-
0
– 使用基于二进制日志文件位置的复制方法。默认为0
。 -
1
– 使用基于 GTID 的复制方法。
-
使用说明
对于 Aurora MySQL 数据库集群,您将在连接到主实例时调用此存储过程。
管理用户必须运行 mysql.rds_set_source_auto_position
过程。
mysql.rds_skip_repl_error
跳过并删除 MySQL 数据库只读副本上的复制错误。
语法
CALL mysql.rds_skip_repl_error;
使用说明
主用户必须对只读副本运行 mysql.rds_skip_repl_error
过程。有关此过程的更多信息,请参阅跳过当前的复制错误。
要确定是否存在错误,请运行 MySQL SHOW REPLICA STATUS\G
命令。如果复制错误不太严重,您可以运行 mysql.rds_skip_repl_error
以跳过该错误。如果有多个错误,mysql.rds_skip_repl_error
会删除第一个错误,并警告存在其他错误。然后,您可以使用 SHOW REPLICA STATUS\G
确定要对下一个错误采取的适当操作。有关返回的值的信息,请参阅 MySQL 文档中的 SHOW REPLICA STATUS 语法
注意
以前的 MySQL 版本使用的是 SHOW SLAVE STATUS
,而不是 SHOW REPLICA STATUS
。如果您使用的 MySQL 版本低于 8.0.23,那么请使用 SHOW SLAVE STATUS
。
有关解决 Aurora MySQL 的复制错误的信息,请参阅诊断并解决 MySQL 读取复制故障。
复制已停止错误
调用 mysql.rds_skip_repl_error
过程时,您可能会收到一条错误消息,指出副本已关闭或禁用。
如果您对于主实例而不是只读副本运行该过程,则会出现此错误消息。您必须对只读副本运行此过程,该过程才能正常运行。
如果您对只读副本运行该过程,但无法成功重新启动复制,也可能会出现此错误消息。
如果您需要跳过大量错误,复制滞后时间可能会超出二进制日志 (binlog) 文件的默认保留期。在这种情况下,您可能会遇到一个严重错误,这是由于在只读副本上重放之前清除 binlog 文件而造成的。此清除会导致复制停止,而您将无法再调用 mysql.rds_skip_repl_error
命令以跳过复制错误。
您可以增加在源数据库实例上保留 binlog 文件的小时数以缓解该问题。在增加二进制日志保留时间后,您可以重新启动复制进程,并根据需要调用 mysql.rds_skip_repl_error
命令。
要设置 binlog 保留时间,请使用 mysql.rds_set_configuration 过程,并指定 'binlog
retention hours'
配置参数以及在数据库集群上保留 binlog 文件的小时数。以下示例将 binlog 文件的保留期设置为 48 个小时。
CALL mysql.rds_set_configuration('binlog retention hours', 48);
mysql.rds_start_replication
从 Aurora MySQL 数据库集群发起复制。
注意
您可以使用 mysql.rds_start_replication_until(Aurora MySQL 版本 3) 或 mysql.rds_start_replication_until_gtid(Aurora MySQL 版本 3) 存储过程从 Aurora MySQL 数据库实例中启动复制,并在指定的二进制日志文件位置停止复制。
语法
CALL mysql.rds_start_replication;
使用说明
主用户必须运行 mysql.rds_start_replication
过程。
要从 Amazon RDS 外部的 MySQL 实例导入数据,请在调用 mysql.rds_set_external_master
或 mysql.rds_set_external_source
以构建复制配置后,再对只读副本调用 mysql.rds_start_replication
以开始复制过程。有关更多信息,请参阅 Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制(二进制日志复制)。
要将数据导出到 Amazon RDS 外部的 MySQL 实例,请对只读副本调用 mysql.rds_start_replication
和 mysql.rds_stop_replication
以控制某些复制操作,如清除二进制日志。有关更多信息,请参阅 Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制(二进制日志复制)。
您还可以对只读副本调用 mysql.rds_start_replication
,以便重新启动您先前通过调用 mysql.rds_stop_replication
停止的任何复制过程。有关更多信息,请参阅 复制已停止错误。
mysql.rds_start_replication_until(Aurora MySQL 版本 3)
从 Aurora MySQL 数据库集群发起复制,并在指定的二进制日志文件位置停止复制。
语法
CALL mysql.rds_start_replication_until (
replication_log_file
,replication_stop_point
);
参数
-
replication_log_file
-
源数据库实例上包含复制信息的二进制日志的名称。
-
replication_stop_point
-
replication_log_file
二进制日志中复制将停止的位置。
使用说明
主用户必须运行 mysql.rds_start_replication_until
过程。
Aurora MySQL 版本 3.04 及更高版本支持该过程。
托管式复制不支持 mysql.rds_start_replication_until
存储过程,其中包括以下内容:
为 replication_log_file
参数指定的文件名必须与源数据库实例二进制日志文件名匹配。
当 replication_stop_point
参数指定位于过去的某个停止位置时,即会立即停止复制。
示例
以下示例将启动复制并复制更改,直到它到达 120
二进制日志文件中的 mysql-bin-changelog.000777
位置。
call mysql.rds_start_replication_until( 'mysql-bin-changelog.000777', 120);
mysql.rds_stop_replication
停止从 MySQL 数据库实例中进行复制。
语法
CALL mysql.rds_stop_replication;
使用说明
主用户必须运行 mysql.rds_stop_replication
过程。
如果要配置复制,使其从在 Amazon RDS 外部运行的 MySQL 实例导入数据,则要在导入完成后,再对只读副本调用 mysql.rds_stop_replication
以停止复制过程。有关更多信息,请参阅 Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制(二进制日志复制)。
如果要配置复制,使其将数据导出到在 Amazon RDS 外部运行的 MySQL 实例,则要对只读副本调用 mysql.rds_start_replication
和 mysql.rds_stop_replication
以控制某些复制操作,如清除二进制日志。有关更多信息,请参阅 Aurora 与 MySQL 之间或 Aurora 与其他 Aurora 数据库集群之间的复制(二进制日志复制)。
托管式复制不支持 mysql.rds_stop_replication
存储过程,其中包括以下内容: