Perché la mia attività CDC di AWS DMS restituisce l'errore 1236 quando utilizzo MySQL come origine?

8 minuti di lettura
0

Sto utilizzando AWS Database Migration Service (AWS DMS) per migrare i dati da un motore di database MySQL di origine a uno di destinazione. Ma l'attività restituisce l'errore 1236. Come posso risolvere questo problema?

Breve descrizione

Con AWS DMS, puoi eseguire migrazioni una tantum e replicare le modifiche in corso per mantenere origini e destinazioni sincronizzate. Per leggere le modifiche in corso dal database di origine, AWS DMS utilizza le operazioni API specifiche del motore per la lettura delle modifiche dai registri delle transazioni del motore di origine. Quando utilizzi MySQL come origine, AWS DMS legge le modifiche dai registri binari basati su riga (binlog). AWS DMS esegue quindi la migrazione di tali modifiche alla destinazione.

L'errore 1236 è causato dai problemi con i registri binari. Quindi, prima di risolvere i problemi, assicurati che tutti i parametri di registrazione binaria siano configurati correttamente per supportare il CDC di AWS DMS. Per ulteriori informazioni, consulta Using a self-managed MySQL-compatible database as a source for AWS DMS (Utilizzo di un database compatibile con MySQL gestito dal cliente come origine per AWS DMS) e Using an AWS-managed MySQL-compatible database as a source for AWS DMS (Utilizzo di un database compatibile con MySQL gestito da AWS come origine per AWS DMS).

Risoluzione

Completa i seguenti passaggi, a seconda della causa principale dell'errore.

Errore 1236 (impossibile trovare il nome del primo file di registro nel file indice del registro binario) durante la lettura del binlog

Errore nei registri delle attività:

[SOURCE_CAPTURE  ]I: Setting position in binlog 'mysql-bin-changelog.014448' at 119624570  (mysql_endpoint_capture.c:886)
[SOURCE_CAPTURE  ]I: Position was set in binlog 'mysql-bin-changelog.014448' at 119624570  (mysql_endpoint_capture.c:922)
[SOURCE_CAPTURE  ]E: Error 1236 (Could not find first log file name in binary log index file) reading binlog [1020493] 
[TASK_MANAGER    ]I: Task - ABCDXXXXXXXXXXXXXX is in ERROR state, updating starting status to AR_NOT_APPLICABLE

Questo errore indica che il registro binario utilizzato da AWS DMS per replicare le modifiche dei dati nella destinazione è stato eliminato dal database MySQL di origine. Ciò avviene per due motivi:

  • Il periodo di conservazione del registro binario è troppo basso.
  • L'attività AWS DMS si è bloccata o è stata interrotta a causa di un problema.

Esegui questi comandi per verificare se il registro binario è disponibile o meno.

Elenca tutti i file di registro binari:

mysql> SHOW BINARY LOGS;

Elenca il file di registro binario e la posizione attuali:

mysql> SHOW MASTER STATUS;

Per risolvere questo errore, verifica innanzitutto il periodo di conservazione del registro binario nel database MySQL di origine. Aumenta il periodo di conservazione, se necessario. Riavvia l'attività AWS DMS per eseguire nuovamente la fase di caricamento completo.

Completa i seguenti passaggi, a seconda del tipo di istanza utilizzata.

Database MySQL gestiti dal cliente: on-premise o Amazon Elastic Compute Cloud (Amazon EC2)

Controlla il valore di expire_logs_days per verificare il periodo di conservazione dei registri binari. È una best practice impostare questo parametro su un valore pari o superiore a 1 a livello globale.

Database MySQL gestiti da AWS: Amazon Relational Database Service (Amazon RDS) per MySQL o Amazon Aurora versione compatibile con MySQL

1.    Verifica le ore di conservazione del binlog impostate nel database MySQL eseguendo il comando mysql.rds_show_configuration:

mysql> call mysql.rds_show_configuration;

2.    Per aumentare la conservazione del registro a 24 ore, esegui il comando mysql.rds_set_configuration:

mysql> call mysql.rds_set_configuration('binlog retention hours', 24);

Errore 1236 (la voce del registro eventi ha superato max_allowed_packet; aumenta max_allowed_packet sul master;...)

Errore nei registri delle attività:

[SOURCE_CAPTURE  ]I:  Position was set in binlog 'mysql-bin.056367' at 787323674  (mysql_endpoint_capture.c:922)
[SOURCE_CAPTURE  ]D:  net_safe_read error 1236 (log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master; the first event 'mysql-bin.056367' at 787323674, the last event read from '/mnt/data/logs/mysql-bin.056367' at 123, the last byte read from '/mnt/data/logs/mysql-bin.056367' at 787323693.)  (mysql_endpoint_capture.c:1119)
[SOURCE_CAPTURE  ]I:  Error 1236 (log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master; the first event 'mysql-bin.056367' at 787323674, the last event read from '/mnt/data/logs/mysql-bin.056367' at 123, the last byte read from '/mnt/data/logs/mysql-bin.056367' at 787323693.) reading binlog. Try reconnect  (mysql_endpoint_capture.c:1123)

Questo errore ha due possibili cause:

  1. Il valore di max_allowed_packet nell'origine è inferiore alle dimensioni degli eventi binlog nella stessa posizione.
  2. Il binlog è danneggiato nel database di origine.

Per risolvere questi problemi, completa i seguenti passaggi:

1.    Nell'origine, imposta max_allowed_packet su un valore più elevato. In questo modo, puoi escludere le dimensioni degli eventi binlog come possibile causa dell'errore. Questo parametro può avere un valore massimo di 1 GB.

  1. Se l'impostazione di un valore max_allowed_packet più elevato non risolve il problema, i binlog nell'origine potrebbero essere danneggiati. Il messaggio di errore contiene il seguente testo:

"il primo evento '/mnt/data/logs/mysql-bin.056367' a 123, l'ultimo evento letto da '/mnt/data/logs/mysql-bin.056367' a 787323693"

Quindi, verifica la presenza di dati danneggiati in mysql-bin.056367 eseguendo questi comandi:

1.    Verifica se il binlog esiste:

mysql> SHOW BINARY LOGS;

2.    Visualizza gli eventi nel registro binario:

mysql> SHOW BINLOG EVENTS IN '<binlog file>' FROM <position>;

3.    Scarica i registri binari:

mysql> MYSQLBINLOG;

Errore 1236 (binlog interrotto durante l'evento; considera esaurito lo spazio su disco sul master;...)

Errore nei registri delle attività:

[SOURCE_CAPTURE ]I: Read next binary log event failed; net_safe_read error 1236 (binlog truncated in the middle of event; consider out of disk space on master; the first event 'mysql-bin-changelog.017672' at 486, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.017672' at 125, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.017672' at 4756.) (mysql_endpoint_capture.c:1069)
[SORTER ]I: Transaction consistency reached (sorter_transaction.c:347)
[TASK_MANAGER ]I: Starting replication now (replicationtask.c:2774)
[TASK_MANAGER ]I: Task - MGLVRIRUJH6FE2GP6F7SW46BPBW6YKF2JUJPSVY is in RUNNING state, updating starting status to AR_RUNNING (repository.c:5110)

Questo errore ha due cause principali:

  1. C'è un sync_binlog != 1 sul server principale. Ciò significa che gli eventi del registro binario potrebbero non essere sincronizzati sul disco.
  2. Il binlog è danneggiato nel database di origine.

Per risolvere questo errore:

1.    Verifica il valore del parametro sync_binlog nell'origine.

2.    Modifica il valore di sync_binlog e impostalo su 1.

3.    Riavvia l'attività.

Nota: se il parametro sync_binlog è già impostato su 1, controlla la presenza di dati danneggiati nel registro binario utilizzando i passaggi precedentemente specificati per l'Errore 1236 (la voce del registro eventi ha superato max_allowed_packet; aumenta max_allowed_packet sul master;...)

Errore 1236 (il client ha richiesto al master di avviare la replica da una posizione impossibile...)

Errore nei registri delle attività:

[SOURCE_CAPTURE  ]I:  Position was set in binlog 'mysql-bin-changelog.007989' at 1631  (mysql_endpoint_capture.c:922)
[SOURCE_CAPTURE  ]I:  Read next binary log event failed; net_safe_read error 1236 (Client requested master to start replication from impossible position; the first event 'mysql-bin-changelog.007989' at 1631, the last event read from 'mysql-bin-changelog.007989' at 4, the last byte read from 'mysql-bin-changelog.007989' at 4.)  (mysql_endpoint_capture.c:1053)
[SOURCE_CAPTURE  ]D:  Error reading binary log. [1020493]  (mysql_endpoint_capture.c:3995)
[SOURCE_CAPTURE  ]E:  Error 1236 (Client requested master to start replication from impossible position; the first event 'mysql-bin-changelog.007989' at 1631, the last event read from 'mysql-bin-changelog.007989' at 4, the last byte read from 'mysql-bin-changelog.007989' at 4.) reading binlog events [1020493]  (mysql_endpoint_capture.c:1074)

Questo errore si verifica in genere se il server del database MySQL di origine si arresta in modo imprevisto. Potrebbe essere il risultato di un guasto hardware come un errore del disco o un'interruzione dell'alimentazione.

Per risolvere questo errore, esegui le seguenti operazioni a seconda del tipo di attività AWS DMS:

  • Caricamento completo e attività CDC: riavvia l'attività AWS DMS.
  • Solo attività CDC: avvia l'attività AWS DMS dalla posizione successiva del registro binario

Errore 1236 (il client ha richiesto al master di avviare la replica dalla posizione > dimensione del file)

Errore nei registri delle attività:

[SOURCE_CAPTURE  ]I:  Position was set in binlog 'binlog.000012' at 2179  (mysql_endpoint_capture.c:922)
[SOURCE_CAPTURE  ]I:  Read next binary log event failed; net_safe_read error 1236 (Client requested master to start replication from position > file size)  (mysql_endpoint_capture.c:1052

Questo errore potrebbe essere causato da registri binari crittografati. Se il database MySQL di origine esegue MySQL versione 8.0 e i registri binari sono crittografati, AWS DMS non è in grado di leggere i registri durante l'inizializzazione dell'attività. Di conseguenza, AWS DMS registra questo errore. AWS DMS non supporta la replica CDC utilizzando MySQL 8.0 come origine quando la crittografia del registro binario è attivata.

1.    Verifica la tua versione di MySQL:

mysql> SELECT VERSION();

2.    Verifica se binlog_encryption è ON (Attivo):

mysql> SELECT * FROM performance_schema.global_variables WHERE VARIABLE_NAME = 'binlog_encryption';

3.    Disattiva la crittografia binlog:

mysql> SET GLOBAL binlog_encryption = OFF;

-oppure-

Avvia l'attività AWS DMS con binlog_encryption disattivato e successivamente attiva binlog_encryption:

mysql> SET GLOBAL binlog_encryption = ON;

Informazioni correlate

How do I troubleshoot binary logging errors that I received when using AWS DMS with Aurora MySQL as the source? (Come posso risolvere gli errori nella registrazione binaria che ho ricevuto quando ho utilizzato AWS DMS con Aurora MySQL come origine?)

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa