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

Date de la dernière mise à jour : 19/08/2020

J'utilise une instance Amazon Relational Database Service (Amazon RDS) qui exécute MySQL ou MariaDB. J'utilise mysqldump pour importer ou exporter des données et je reçois un message d'erreur. Comment résoudre ce problème ?

Brève description

Vous pouvez recevoir les erreurs suivantes lorsque vous utilisez mysqldump :

  • Impossible d'exécuter les erreurs FLUSH TABLES WITH READ LOCK
  • Erreurs Max_allowed_packet
  • Erreurs SUPER privilege(s) and DEFINER
  • Erreurs de connexion perdue ou abandonnée

Solution

Couldn't execute FLUSH TABLES WITH READ LOCK error (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 à celle-ci :

« mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'user'@'%' (using password: YES) (1045) » (mysqldump : Impossible d’exécuter 'FLUSH TABLES WITH READ LOCK' : Accès refusé à l’utilisateur 'user'@'%' (utilisation du mot de passe : OUI)

L'option --master-data acquiert un FLUSH TABLES WITH READ LOCK. Cela nécessite des SUPER privilèges dont l'utilisateur principal Amazon RDS ne dispose 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 du fichier journal binaire et sa position (coordonnées) 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. Dans ce cas, la position de journal exacte dans le fichier mysqldump n'est pas fournie. Pour résoudre ce problème, créez le mysqldump lorsque l'application est arrêtée ou à 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. Procédez comme suit 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.    Créez le mysqldump sans --master-data=2 à partir du 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, redémarrez la réplication en utilisant 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 à celle-ci :

« 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 l'instance de base de données RDS. Pour de plus d'informations, reportez-vous à la documentation MySQL pour Paquet trop volumineux.

Pour résoudre les erreurs max_allowed_packet, augmentez la valeur globale de max_allowed_packet, ou définissez le paramètre max_allowed_packet dans mysqldump pour la séance (et non pas globalement pour l'ensemble de la base de données). Par exemple, vous pouvez modifier la commande comme suit :

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

Erreurs SUPER privilege(s) and DEFINER

Lorsque vous utilisez l'utilitaire mysqldump pour importer des données dans une instance de base de données RDS exécutant MySQL ou MariaDB, vous pouvez recevoir une erreur similaire à celle-ci :

« 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 perdue ou abandonnée

Lorsque vous utilisez mysqldump pour importer des données, vous pouvez recevoir une erreur similaire à celle-ci :

« 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' (Got timeout writing communication packets) » (mysqldump : connexion abandonnée XXXXXX à bd : 'nom_bd' utilisateur : 'master_user' hôte : 'XXXXXXX' (Dépassement de délai d’attente pendant l’écriture des paquets de communication)

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 » (Perte de connexion au serveur MySQL) lors de la connexion à mon instance de base de données MySQL Amazon RDS ?


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?