Comment résoudre une erreur que j'ai reçue lors de l'utilisation de mysqldump sur Amazon RDS pour MySQL ou MariaDB ?

Lecture de 5 minute(s)
0

J'utilise une instance de base de données Amazon Relational Database Service (Amazon RDS) qui exécute MySQL ou MariaDB. J'utilise mysqldump pour importer ou exporter des données, et j'obtiens un message d'erreur. Comment résoudre cette erreur ?

Brève description

Vous pouvez recevoir les erreurs suivantes lorsque vous utilisez mysqldump :

  • Erreurs Couldn't execute FLUSH TABLES WITH READ LOCK
  • Erreurs max_allowed_packet
  • Erreurs de privilège(s) SUPER et DEFINER
  • Erreurs de connexion perdues ou abandonnées

Résolution

Erreur impossible d'exécuter FLUSH TABLES WITH READ LOCK

Lorsque vous utilisez l’option --master-data avec mysqldump pour exporter des données, vous pouvez recevoir une erreur similaire à la suivante :

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

L'option --master-data obtient un FLUSH TABLES WITH READ LOCK. Cela nécessite des privilèges SUPER que l'utilisateur principal d'Amazon RDS ne possède pas, et Amazon RDS ne prend pas en charge GLOBAL READ LOCK. Lorsque MySQL exécute une instruction CHANGE MASTER TO pour obtenir des informations de journal, le nom et la position (coordonnées) du fichier journal binaire sont enregistrés dans le fichier mysqldump. Pour plus d'informations, consultez la documentation MySQL pour ER_ACCESS_DENIED_ERROR.

Pour résoudre cette erreur, supprimez l'option --master-data. Lorsque vous supprimez cette option, vous n'obtenez pas la position exacte du journal dans le fichier mysqldump. Pour contourner ce problème, utilisez le fichier mysqldump lorsque votre application est arrêtée ou utilisez le fichier mysqldump à partir d'un réplica en lecture Amazon RDS. Cela vous permet d'obtenir la position exacte du journal en exécutant SHOW SLAVE STATUS, car l'arrêt du réplica confirme que les positions du journal binaire ne changent pas. Suivez ces étapes pour créer un mysqldump à partir d'un réplica en lecture MySQL Amazon RDS de cette instance de base de données RDS.

1.    Définissez une valeur pour la conservation du journal binaire.

2.    Arrêtez la réplication en exécutant la commande suivante sur le réplica en lecture :

CALL mysql.rds_stop_replication;

3.    Prenez le mysqldump sans --master-data=2 dans le réplica en lecture.

4.    Exécutez SHOW SLAVE STATUS sur le réplica et capturez Master_Log_File et Exec_Master_Log_Pos.

5.    Si vous utilisez le réplica pour votre application, relancez la réplication en suivant la procédure stockée suivante :

CALL mysql.rds_start_replication;

Si vous n'utilisez pas le réplica pour votre application, vous pouvez le supprimer.

Erreurs Max_allowed_packet

Lorsque vous utilisez mysqldump pour exporter des données, vous pouvez recevoir une erreur similaire à la suivante :

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

Cette erreur se produit lorsque la commande mysqldump demande un paquet dont la taille est supérieure à la valeur du paramètre max_allowed_packet défini pour votre instance de base de données RDS. Pour plus d'informations, consultez la documentation MySQL pour Paquet trop volumineux.

Pour résoudre les erreurs max_allowed_packet, augmentez la valeur globale de max_allowed_packet, ou configurez max_allowed_packet dans le mysqldump pour cette session (plutôt que pour l'ensemble de la base de données). Par exemple, vous pouvez modifier la commande comme suit :

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

Erreurs de privilège(s) SUPER et DEFINER

Lorsque vous utilisez mysqldump pour importer des données dans une instance de base de données RDS qui exécute MySQL ou MariaDB, vous pouvez recevoir une erreur similaire à la suivante :

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

Cette erreur indique un ou plusieurs des problèmes suivants :

Erreurs de connexion perdues ou abandonnées

Lorsque vous utilisez mysqldump pour importer des données, vous pouvez recevoir une erreur similaire à la suivante :

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

--ou--

« mysqldump: Aborted connection XXXXXX to db: 'db_name' user: 'master_user' host: 'XXXXXXX' (délai d'écriture des paquets de communication dépassé) »

Pour plus d'informations sur la cause et la résolution de cette erreur, consultez Comment résoudre l'erreur « MySQL server has gone away » lors de la connexion à une instance de base de données MySQL Amazon RDS ?


Informations connexes

Documentation MySQL pour mysqldump

Comment puis-je activer les fonctions, les procédures et les déclencheurs pour mon instance de base de données Amazon RDS MySQL ?