Lorsque j'essaie d'importer des données dans une instance Amazon Relational Database Service (Amazon RDS) pour MySQL via mysqldump, je reçois une erreur similaire à celle-ci :

Error: 1227 SQLSTATE: 42000 (ER_SPECIFIC_ACCESS_DENIED_ERROR)
Access denied; you need (at least one of) the %s privilege(s) for this operation

Cette erreur se produit lorsque le journal binaire est activé dans la base de données de destination et lorsque le fichier mysqldump contient un objet (un déclencheur, une fonction ou un événement).

Si l'une des instructions de création ne contient pas les mots clés « NO SQL », « READS SQL DATA » ou « DETERMINISTIC », MySQL ne peut pas créer ces objets et l'importation échoue avec une erreur 1227.

Pour résoudre l'erreur 1227, effectuez l'une des actions suivantes :

Modifiez la valeur du groupe de paramètres de log_bin_trust_function_creators à 1 :

Pour déverrouiller cette condition et autoriser l'importation de tous les objets, définissez les variables système global log_bin_trust_function_creators à 1 dans l'ensemble du groupe de paramètres personnalisés RDS. Pour plus d'informations, consultez Modification de paramètres dans un groupe de paramètres DB. Remarque : puisque vous ne pouvez pas modifier les valeurs dans un groupe de paramètres par défaut, vous devez créer un groupe de paramètres DB, puis modifier le paramètre.

  1. Ouvrez la console Amazon RDS, puis choisissez Parameter Groups (Groupes de paramètres) dans le volet de navigation.
  2. Sélectionnez le groupe de paramètres log_bin_trust_function_creators, choisissez les actions du groupe de paramètres, puis choisissez Edit (Modifier).
  3. Changez la valeur à 1.
  4. Sélectionnez Save Changes. Remarque : assurez-vous que le même groupe de paramètres est attaché à l'instance cible sur laquelle l'erreur s'est produite.

Recherchez le DEFINER dans mysqldump et supprimez les utilisateurs qui n'existent pas dans la base de données cible.

Pour résoudre l'erreur 1227, recherchez le DEFINER dans mysqldump et supprimez les utilisateurs qui n'existent pas de la base de données RDS cible. Cette erreur peut se produire lorsqu'Amazon RDS pour MySQL tente de créer un objet sous un utilisateur de base de données dans la base de données cible, et que cet utilisateur de base de données n'existe pas sur la base de données de destination. Certains clients de MySQL offrent la possibilité d'ignorer le definer lors de la création d'une sauvegarde logique, mais cela ne se produit pas par défaut. Pour rechercher et supprimer le DEFINER, consultez Je reçois une erreur de definer lorsque j'importe des données dans mon instance RDS MySQL avec mysqldump.

Vous trouverez ci-après un exemple de DEFINER dans mysqldump :

/*!50003 CREATE*/ /*!50017 DEFINER=`rdsadmin`@`localhost`*/ /*!50003 TRIGGER customer_update AFTER UPDATE ON `customer` FOR EACH ROW

Supprimez la section suivante :

/*!50017 DEFINER=`rdsadmin`@`localhost`*/

Le mysqldump modifié doit ressembler à ce qui suit :

/*!50003 CREATE*/ /*!50017 DEFINER=`masteruser`@`%`*/ /*!50003 TRIGGER customer_update AFTER UPDATE ON `customer` FOR EACH ROW

Cette page vous a-t-elle été utile ? Oui | Non

Retour au Centre de connaissances AWS Support

Vous avez besoin d'aide ? Consultez le site du Centre AWS Support.

Date de publication : 27/06/2016

Date de mise à jour : 18/09/2018