mysql.rds_next_master_log
Altera a posição do log da instância de banco de dados de origem para o início do próximo log binário na instância de banco de dados de origem. Use este procedimento somente se estiver recebendo o erro 1236 de E/S de replicação em uma réplica de leitura.
Sintaxe
CALL mysql.rds_next_master_log( curr_master_log );
Parâmetros
- curr_master_log
-
O índice do arquivo de log mestre atual. Por exemplo, se o arquivo atual dor denominado
mysql-bin-changelog.012345
, o índice será 12345. Para determinar o nome do arquivo de log do mestre, execute o comandoSHOW REPLICA STATUS
e veja o campoMaster_Log_File
.nota As versões anteriores do MySQL usavam
SHOW SLAVE STATUS
em vez deSHOW REPLICA STATUS
. Se você estiver usando uma versão do MySQL anterior à 8.0.23, useSHOW SLAVE STATUS
.
Observações de uso
O usuário mestre deve executar o procedimento mysql.rds_next_master_log
.
Chame mysql.rds_next_master_log
somente se a replicação falhar após um failover de uma instância de banco de dados multi-AZ que for a origem da replicação, e o campo Last_IO_Errno
do SHOW REPLICA STATUS
reportar o erro 1236 de E/S.
Chamar mysql.rds_next_master_log
pode resultar em perda de dados na réplica de leitura caso as transações na instância de origem não estiverem gravadas no log binário no disco antes de ocorrer o evento de failover. Você pode reduzir a chance disto acontecer configurando os parâmetros de instância de origem sync_binlog = 1 e innodb_support_xa = 1, embora isso possa reduzir a performance. Para obter mais informações, consulte Como trabalhar com réplicas de leitura.
Exemplos
Suponha que a replicação falhe em uma réplica de leitura do Amazon RDS. A execução de SHOW REPLICA
STATUS\G
na réplica de leitura retorna o seguinte resultado:
*************************** 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
O campo Last_IO_Errno
mostra que a instância está recebendo o erro 1236 de E/S. O campo Master_Log_File
mostra que o nome do arquivo é mysql-bin-changelog.012345
, o que significa que o índice de arquivos de log é 12345
. Para resolver o erro, chame mysql.rds_next_master_log
com o seguinte parâmetro:
CALL mysql.rds_next_master_log(12345);
As versões anteriores do MySQL usavam SHOW SLAVE STATUS
em vez de SHOW REPLICA STATUS
. Se você estiver usando uma versão do MySQL anterior à 8.0.23, use SHOW SLAVE STATUS
.