131 votes

Erreur de MySQL/Amazon RDS : "vous n'avez pas les privilèges SUPER..."

Je tente de copier ma base de données mysql d'un Amazon EC2 vers un RDS :

J'ai réussi à faire un mysqldump de ma base de données dans mon dossier racine en utilisant ceci :

root@ip-xx-xx-xx-xx:~# mysqldump my_database -u my_username -p > my_database.sql

J'ai ensuite essayé de transférer ce fichier .sql vers ma nouvelle base de données RDS :

root@ip-xx-xx-xx-xx:~# mysql my_database -u my_username -p -h  
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql

Malheureusement, je reçois le message d'erreur suivant :

You do not have the SUPER privilege and binary logging is enabled 
(you *might* want to use  the less safe log_bin_trust_function_creators variable)

J'ai essayé de GRANT SUPER.. de diverses manières, mais j'obtiens des erreurs lorsque j'essaie de le faire aussi. Taper mysql > FLUSH privileges; ne fonctionne pas non plus.

Je suis un débutant en mysql donc désolé pour cette question si facile. Qu'en pensez-vous ?

200voto

arun-jamhub Points 21
  1. Ouvrez la console web RDS.
  2. Ouvrez l'onglet "Groupes de paramètres".
  3. Créez un nouveau groupe de paramètres. Dans la boîte de dialogue, sélectionnez la famille MySQL compatible avec la version de votre base de données MySQL, donnez-lui un nom et confirmez. Sélectionnez le groupe de paramètres qui vient d'être créé et cliquez sur "Editer les paramètres".
  4. Recherchez le paramètre log_bin_trust_function_creators et définir sa valeur à 1 .
  5. Sauvegardez les modifications.
  6. Ouvrez l'onglet "Instances". Développez votre instance MySQL et lancez l'action "Instance Action" nommée "Modify".
  7. Sélectionnez le groupe de paramètres qui vient d'être créé et activez "Appliquer immédiatement".
  8. Cliquez sur "Continuer" et confirmez les modifications.
  9. Attendez que l'opération "Modifier" soit terminée.
  10. Encore une fois, ouvrez l'onglet "Instances". Développez votre instance MySQL et développez l'onglet "Instance Action" et sélectionnez "Reboot".

Un redémarrage n'est pas nécessaire depuis log_bin_trust_function_creators a apply type = dynamic . Du moins, cela est vrai si votre RDS a déjà un groupe de paramètres attaché et que vous le modifiez, au lieu de créer un nouveau groupe de paramètres. Il suffit alors de sauvegarder la modification du paramètre pour pouvoir continuer.

84voto

Ross Smith II Points 4839

Par http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ vous devez définir log_bin_trust_function_creators à 1 en Console AWS pour charger votre fichier dump sans erreur.

Si vous voulez ignorer ces erreurs et charger le reste du fichier de vidage, vous pouvez utiliser la commande -f option :

mysql -f my_database -u my_username -p -h  
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql

El -f signalera les erreurs, mais continuera à traiter le reste du fichier de vidage.

34voto

anders Points 38

Le problème des déclencheurs et des procédures stockées dans le fichier de vidage est que ces définitions incluent l'utilisateur par qui la procédure stockée doit être créée, le DEFINER. L'utilisateur n'existe probablement pas dans le RDS et une erreur est alors générée. Pour pouvoir charger le fichier dump, vous pouvez supprimer le DEFINER en utilisant sed ou Perl et créer la procédure stockée/le déclencheur avec l'utilisateur qui effectue l'importation.

perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' < mysqldump.sql > mysqldump.fixed.sql

Maintenant, vous devriez être en mesure de charger le fichier de vidage fixé

mysql my_database -u my_username -p -h rds_host < mysqldump.fixed.sql

Comme indiqué dans la réponse précédente, vous devez définir le paramètre de la base de données :

log_bin_trust_function_creators = 1

33voto

Yep_It's_Me Points 186

Pour moi, il n'y avait que 2 commandes dans mon fichier dump qui nécessitaient des privilèges SUPER :

  • SET @@GLOBAL.gtid_purged
  • SET @@SESSION.SQL_LOG_BIN

Selon le docs mysqldump vous pouvez les désactiver avec --set-gtid-purged=OFF .

Ensuite, en regardant man mysqldump :

Utilisez ON si l'intention est de déployer un nouvel esclave de réplication en utilisant seulement certaines des données du serveur vidangé. Utilisez OFF si l'intention est de réparer une table en la copiant dans une topologie. Utilisez OFF si l'intention est de copier une table entre des topologies de réplication qui sont disjointes et qui le resteront.

J'ai donc décidé d'ajouter --set-gtid-purged=OFF à mon mysqldump et ensuite j'ai pu importer avec succès le fichier dump résultant.

6voto

Josh Woodcock Points 438

Comme défini dans la documentation AWS, les déclencheurs, les procédures et les fonctions sont désactivés par défaut car la journalisation binaire est activée par défaut. La désactivation rend fondamentalement votre base de données plus sûre, mais si vous avez correctement sécurisé le réseau, cela n'aura aucune importance.

Suivez ces étapes et votre problème sera résolu https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/

De même, vous ne devriez pas utiliser de définisseurs lors de la création de procédures. Une simple commande sed peut les supprimer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X