¿Cómo puedo resolver un error que he recibido al usar mysqldump en Amazon RDS para MySQL o MariaDB?

5 minutos de lectura
0

Utilizo una instancia de base de datos de Amazon Relational Database Service (Amazon RDS) que ejecuta MySQL o MariaDB. Utilizo mysqldump para importar o exportar datos y aparece un error. ¿Cómo puedo solucionar este error?

Descripción corta

Puede recibir los siguientes errores al usar mysqldump:

  • Errores Couldn't execute FLUSH TABLES WITH READ LOCK
  • Errores Max_allowed_packet
  • Errores SUPER privilege(s) y DEFINER
  • Errores Lost or aborted connection

Resolución

Error Couldn't execute FLUSH TABLES WITH READ LOCK

Al usar la opción --master-data con mysqldump para exportar datos, es posible que reciba un error similar al siguiente:

«mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'user'@'%' (using password: YES) (1045)»

La opción --master-data adquiere un error FLUSH TABLES WITH READ LOCK. Esto requiere privilegios SUPER que el usuario maestro de Amazon RDS no tiene y Amazon RDS no admite GLOBAL READ LOCK. Cuando MySQL ejecuta una instrucción CHANGE MASTER TO para obtener información de registro, el nombre y la posición del archivo de registro binario (coordenadas) se registran en el archivo mysqldump. Para obtener más información, consulte la documentación de MySQL para el error ER_ACCESS_DENIED_ERROR.

Para resolver este error, elimine la opción --master-data. Al eliminar esta opción, no se le da una posición de registro exacta en el mysqldump. Para solucionar este problema, tome el mysqldump cuando la aplicación esté detenida o extraiga el mysqldump de una réplica de lectura de Amazon RDS. Esto le permite obtener la posición exacta del registro ejecutando SHOW SLAVE STATUS, ya que al detener la réplica se confirma que las posiciones del registro binario no cambian. Siga estos pasos para crear un mysqldump a partir de una réplica de lectura de MySQL de Amazon RDS de esta instancia de base de datos de RDS.

1.    Establezca un valor para la retención del registro binario.

2.    Detenga la replicación ejecutando el siguiente comando en la réplica de lectura:

CALL mysql.rds_stop_replication;

3.    Tome el mysqldump sin --master-data=2 de la réplica de lectura.

4.    Ejecute SHOW SLAVE STATUS en la réplica y capture el Master_Log_File y la Exec_Master_Log_Pos.

5.    Si usa la réplica para su aplicación, vuelva a iniciar la replicación mediante el siguiente procedimiento almacenado:

CALL mysql.rds_start_replication;

Si no usa la réplica para la aplicación, puede eliminarla.

Errores Max_allowed_packet

Al usar mysqldump para exportar datos, es posible que reciba un error similar al siguiente:

«Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `tb_name` at row: XX»

Este error se produce cuando el comando mysqldump solicita un paquete mayor que el valor del parámetro max_allowed_packet establecido para la instancia de base de datos de RDS. Para obtener más información, consulte la documentación de MySQL para Packet too large.

Para resolver los errores max_allowed_packet, aumente el valor global de max_allowed_packet o configure el max_allowed_packet en mysqldump para esa sesión (en lugar de hacerlo globalmente para toda la base de datos). Por ejemplo, puede modificar el comando de forma similar a la siguiente:

$ mysqldump --max_allowed_packet=1G ......

Errores SUPER privilege(s) y DEFINER

Al usar mysqldump para importar datos a una instancia de base de datos de RDS que ejecute MySQL o MariaDB, es posible que reciba un error similar al siguiente:

«ERROR 1227 (42000) at line XX: Access denied; you need (at least one of) the SUPER privilege(s) for this operation»

Este error indica uno o más de los siguientes problemas:

Errores Lost or aborted connection

Al usar mysqldump para importar datos, es posible que reciba un error similar al siguiente:

«mysqldump: error 2013: lost connection to mysql server during query when dumping table»

Alternativa

«mysqldump: Aborted connection XXXXXX to db: 'db_name' user: 'master_user' host: 'XXXXXXX' (Got timeout writing communication packets)»

Para obtener más información sobre la causa y la resolución de este error, consulte How do I resolve the error "MySQL server has gone away" when connecting to my Amazon RDS MySQL DB instance?


Información relacionada

Documentación de MySQL para mysqldump

¿Cómo puedo habilitar las funciones, procedimientos y desencadenadores de mi instancia de base de datos de Amazon RDS para MySQL?