mysql.rds_next_master_log - Amazon Relational Database Service

mysql.rds_next_master_log

将源数据库实例日志位置更改为源数据库实例上的下一个二进制日志的开始位置。只有在只读副本上收到复制 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_logLast_IO_Errno 字段报告 I/O 错误 1236 时调用 SHOW REPLICA STATUS

如果在发生故障转移事件之前,源实例中的事务处理未写入到磁盘上的二进制日志,调用 mysql.rds_next_master_log 会导致只读副本丢失数据。通过配置源实例参数 sync_binlog = 1 和 innodb_support_xa = 1 可以降低发生此状况的概率,但这可能会降低性能。有关更多信息,请参阅“使用只读副本”。

示例

假定 Amazon RDS 只读副本中的复制失败。对只读副本运行 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