¿Por qué falló mi tarea de CDC de AWS DMS con un error 1236 al usar MySQL como origen?

Última actualización: 13-09-2022

Utilizo AWS Database Migration Service (AWS DMS) para migrar mis datos desde un motor de base de datos MySQL de origen a un motor de destino. Sin embargo, la tarea falla con un error 1236. ¿Cómo se soluciona este problema?

Descripción corta

Con AWS DMS, puede realizar migraciones únicas y replicar los cambios en curso para mantener sincronizados los orígenes y los destinos. Para leer los cambios en curso de la base de datos de origen, AWS DMS utiliza acciones de API específicas del motor para leer los cambios de los registros de transacciones del motor de origen. Al usar MySQL como origen, AWS DMS lee los cambios de los registros binarios basados en filas (binlogs). A continuación, AWS DMS migra esos cambios al destino.

El error 1236 se debe a problemas con los registros binarios. Por lo tanto, antes de solucionar problemas, asegúrese de que todos los parámetros de registro binario estén configurados correctamente para admitir AWS DMS CDC. Para obtener más información, consulte Using a self-managed MySQL-compatible database as a source for AWS DMS (Uso de una base de datos autogestionada compatible con MySQL como fuente de AWS DMS) y Using an AWS-managed MySQL-compatible database as a source for AWS DMS (Uso de una base de datos compatible con MySQL administrada por AWS como origen para AWS DMS).

Resolución

Siga los pasos que se indican a continuación, según la causa principal del error.

Error 1236 (Could not find first log file name in binary log index file) (no se pudo encontrar el primer nombre del archivo de registro en el archivo de índice de registro binario) al leer el binlog

Error en los registros de tareas:

[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

Este error indica que el registro binario que utiliza AWS DMS para replicar los cambios de datos en el destino se ha purgado de la base de datos MySQL de origen. Esto ocurre por dos motivos:

  • El período de retención del registro binario es demasiado bajo.
  • La tarea de AWS DMS se bloqueó o se detuvo debido a un problema.

Ejecute estos comandos para confirmar si el registro binario está disponible o no.

Mostrar todos los archivos de registro binarios:

mysql> SHOW BINARY LOGS;
mysql> SHOW MASTER STATUS;

Para resolver este error, revise primero el período de retención del registro binario en la base de datos MySQL de origen. Aumente el período de retención si es necesario. Reinicie la tarea de AWS DMS para volver a ejecutar la fase de carga completa.

Siga estos pasos, según el tipo de instancia que utilice.

Bases de datos MySQL autogestionadas: locales o en Amazon Elastic Compute Cloud (Amazon EC2)

Revise el valor de expire_logs_days para comprobar el período de retención de los registros binarios. Se recomienda establecer este parámetro en un valor de 1 o superior a nivel global.

Bases de datos MySQL administradas por AWS: Amazon Relational Database Service (Amazon RDS) para MySQL o Amazon Aurora Edición compatible con MySQL

1.    Compruebe las horas de retención de binlog establecidas en la base de datos MySQL mediante la ejecución del comando mysql.rds_show_configuration:

mysql> call mysql.rds_show_configuration;

2.    Para aumentar la retención de registros a 24 horas, ejecute el comando mysql.rds_set_configuration:

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

Error 1236 (log event entry exceeded max_allowed_packet; increase max_allowed_packet on master;...) (la entrada de evento de registro superó el valor de max_allowed_packet; aumente el valor de max_allowed_packet en el maestro;…)

Error en los registros de tareas:

[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)

Este error tiene dos causas posibles:

  1. El valor de max_allowed_packet en el origen es menor que el tamaño de los eventos binlog del origen.
  2. El binlog está dañado en la base de datos de origen.

Para resolver estos problemas, siga estos pasos:

1.    En el origen, establezca max_allowed_packet en un valor más alto. Al hacerlo, puede descartar los tamaños de los eventos binlog como una posible causa del error. Este parámetro puede tener un valor de hasta 1 GB.

2. Si establecer un valor max_allowed_packet más alto no resuelve el problema, es posible que los binlogs del origen estén dañados. El mensaje de error contiene este texto:

“the first event '/mnt/data/logs/mysql-bin.056367' at 123, the last event read from '/mnt/data/logs/mysql-bin.056367' at 787323693” (“el primer evento '/mnt/data/logs/mysql-bin.056367' en 123, el último evento leído de '/mnt/data/logs/mysql-bin.056367' en 787323693”)

Por lo tanto, compruebe si mysql-bin.056367 está dañado mediante la ejecución de estos comandos:

1.    Compruebe si existe el binlog:

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

Error 1236 (binlog truncated in the middle of event; consider out of disk space on master;...) (binlog truncado en medio del evento; considere que no hay espacio en disco en el maestro;…)

Error en los registros de tareas:

[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)

Este error tiene dos causas principales:

  1. Hay un sync_binlog!= 1 en el servidor principal. Esto significa que es posible que los eventos de registro binario no estén sincronizados en el disco.
  2. El binlog está dañado en la base de datos de origen.

Para resolver este error:

1.    Compruebe el valor del parámetro sync_binlog en el origen.

2.    Modifique el valor de sync_binlog y establézcalo en 1.

3.    Reinicie la tarea.

Nota: Si el parámetro sync_binlog ya está establecido en 1, revise el registro binario para ver si está dañado siguiendo los pasos detallados anteriormente para el error Error 1236 (log event entry exceeded max_allowed_packet; increase max_allowed_packet on master;…) (la entrada del evento de registro excedió el valor de max_allowed_packet; aumente el valor de max_allowed_packet en master;…)

Error 1236 (Client requested master to start replication from impossible position...) (El cliente solicitó al maestro que iniciara la replicación desde una posición imposible…)

Error en los registros de tareas:

[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)

Este error suele producirse si el servidor de base de datos MySQL de origen se detiene inesperadamente. Esto puede deberse a un fallo de hardware, como un error de disco o un corte del suministro energético.

Para resolver este error, haga lo siguiente en función del tipo de tarea de AWS DMS:

  • Tareas de carga completa y de CDC: reinicie la tarea de AWS DMS.
  • Tareas exclusivas de CDC: inicie la tarea de AWS DMS desde la siguiente posición de registro binario

Error 1236 (Client requested master to start replication from position > file size) (El cliente solicitó al maestro que iniciara la replicación desde una posición > tamaño del archivo)

Error en los registros de tareas:

[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

Este error puede deberse a registros binarios cifrados. Si la base de datos MySQL de origen ejecuta MySQL versión 8.0 y los registros binarios están cifrados, AWS DMS no podrá leer los registros al inicializar la tarea. Como resultado, AWS DMS registra este error. AWS DMS no admite la replicación de CDC con MySQL 8.0 como origen cuando el cifrado de registros binarios está activado.

1.    Compruebe la versión de MySQL:

mysql> SELECT VERSION();

2.    Compruebe si binlog_encryption está ACTIVADO:

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

3.    Desactive el cifrado de binlog:

mysql> SET GLOBAL binlog_encryption = OFF;

De forma alternativa, haga lo siguiente:

Inicie la tarea de AWS DMS con binlog_encryption desactivado y, a continuación, active binlog_encryption:

mysql> SET GLOBAL binlog_encryption = ON;

How do I troubleshoot binary logging errors that I received when using AWS DMS with Aurora MySQL as the source? (¿Cómo resuelvo los errores de registro binario que recibo al momento de utilizar AWS DMS con Aurora MySQL como origen?)

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?