web-dev-qa-db-fra.com

Erreur MySQL / Amazon RDS: "vous ne disposez pas des privilèges SUPER ..."

J'essaie 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

Ensuite, j'ai 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 mysql, désolé pour une question aussi facile. Pensées?

75
tim peterson

Pour http://getasysadmin.com/2011/06/Amazon-rds-super-privileges/ , vous devez définir log_bin_trust_function_creators à 1 dans console AWS , pour charger votre fichier de vidage sans erreur.

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

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

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

49
Ross Smith II
  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, nommez-la et confirmez. Sélectionnez le groupe de paramètres que vous venez de créer et lancez "Editer les paramètres".
  4. Recherchez le paramètre "log_bin_trust_function_creators" et définissez sa valeur sur "1".
  5. Enregistrez les modifications.
  6. Ouvrez l'onglet "Instances". Développez votre instance MySQL et lancez l’action "Instance Action" appelée "Modify".
  7. Sélectionnez le groupe de paramètres que vous venez de créer 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 "Action de l'instance" et sélectionnez "Redémarrer".
103
arun-r

Le problème avec les déclencheurs et les procédures stockées dans le fichier de vidage est que ces définitions incluent l'utilisateur avec lequel la procédure stockée doit être créée, le DEFINER. L'utilisateur n'existant probablement pas dans le RDS, une erreur est alors générée. Pour pouvoir charger le fichier de vidage, vous pouvez supprimer DEFINER à l'aide de 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 pouvoir charger le fichier de vidage fixe

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 DB:

log_bin_trust_function_creators = 1
29
anders

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

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

De plus, vous ne devriez pas utiliser de définisseurs lors de la création de procédures. Une simple commande sed peut l'enlever.

5
Josh Woodcock

En plus de l'édition

log_bin_trust_function_creators = 1

vous devez supprimer tout [~ # ~] le définisseur [~ # ~] de votre fichier de vidage, vérifiez la lien suivant pour [~ # ~] sed [~ # ~] commande qui peut aider à nettoyer votre fichier de vidage SQL .

https://www.percona.com/blog/2014/07/02/using-mysql-triggers-and-views-in-Amazon-rds/#comment-1096824

4
Jubba Smail

Pour moi, mon fichier de vidage ne contenait que 2 commandes nécessitant les privilèges SUPER:

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

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

Puis 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 vidé. Utilisez OFF si vous souhaitez 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 le resteront.

J'ai donc décidé d'ajouter --set-gtid-purged=OFF à ma commande mysqldump et je pourrais ensuite importer avec succès le fichier de vidage obtenu.

1
Yep_It's_Me

Après avoir utilisé arun-r answer, si le problème n'est pas résolu, vous devez modifier votre fichier de vidage. C'est simple.

Dans le fichier de vidage, vous trouverez des lignes comme:

DELIMITER ;;
CREATE DEFINER=`username_from_dumped_database`@`Host_from_dumped_database` PROCEDURE `procedure_or_function_name`()
BEGIN

Vous devez remplacer:

  • username_from_dumped_database par votre nom d'utilisateur sur la base de données rds.
  • Host_from_dumped_databse par %

Je ne sais pas pourquoi mais cette astuce a fonctionné pour moi. Un simple éditeur de texte suffit pour cela.

0
Damien Frances