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
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 :
- Le fichier binaire est activé pour votre instance de base de données RDS cible (période de conservation de sauvegarde > 0), et le fichier mysqldump contient un objet tel qu’un déclencheur, une vue, une fonction ou un événement. Pour plus d’informations, consultez Comment résoudre l'ERREUR 1227 lors de l'activation de la réplication ou des sauvegardes automatiques sur une instance MySQL Amazon RDS ?
- Le fichier mysqldump importé a essayé de créer un objet avec un utilisateur d'attribut DEFINER qui n'existe pas dans l'instance de base de données RDS, ou vous avez essayé de créer un utilisateur d'attribut qui ne dispose pas des privilèges SUPER utilisateur. Pour plus d’informations, consultez Comment éliminer les erreurs de definer lors de l'importation de données vers mon instance Amazon RDS for MySQL en utilisant mysqldump ?
- La commande de la ligne référencée dans le message d'erreur nécessite un ou des SUPER privilèges qui ne sont pas fournis dans les instances de base de données RDS.
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 ?
Informations connexes
Cet article vous a-t-il été utile ?
Besoin d'aide pour une question technique ou de facturation ?