¿Cómo puedo resolver un error que he recibido al usar mysqldump en Amazon RDS para MySQL o MariaDB?
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:
- La instancia de base de datos de RDS de destino tiene el registro binario habilitado (periodo de retención de copias de seguridad > 0) y el archivo mysqldump contiene un objeto, como un desencadenador, una vista, una función o un evento. Para obtener más información, consulte ¿Cómo puedo resolver el ERROR 1227 al habilitar la replicación o las copias de seguridad automatizadas en una instancia MySQL de Amazon RDS?
- El archivo mysqldump que importó intentó crear un objeto con un usuario de atributo DEFINER que no existe en su instancia de base de datos de RDS, o intentó crear un usuario de atributo que no tiene los privilegios de usuario SUPER requeridos. Para obtener más información, consulte ¿Cómo puedo resolver los errores del definidor al importar datos a mi instancia de Amazon RDS para MySQL mediante mysqldump?
- El comando de la línea a la que se hace referencia en el mensaje de error requiere privilegios SUPER que no se proporcionan en las instancias de base de datos de RDS.
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
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 3 años