it-swarm.com.de

MySQL / Amazon RDS-Fehler: "Sie haben keine SUPER-Berechtigungen ..."

Ich versuche, meine MySQL-Datenbank von Amazon EC2 auf ein RDS zu kopieren:

Ich habe erfolgreich ein mysqldump meiner Datenbank in meinen Stammordner geschrieben:

[email protected]:~# mysqldump my_database -u my_username -p > my_database.sql

Dann habe ich versucht, diese .sql-Datei in meine neue RDS-Datenbank zu übertragen:

[email protected]:~# mysql my_database -u my_username -p -h  
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql

Leider erhalte ich folgende Fehlermeldung:

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)

Ich habe auf verschiedene Arten versucht, GRANT SUPER.. Zu verwenden, aber ich erhalte Fehler, wenn ich das auch versuche. Die Eingabe von mysql > FLUSH privileges; Funktioniert ebenfalls nicht.

Ich bin ein MySQL-Anfänger und entschuldige mich für eine so einfache Frage. Gedanken?

75
tim peterson

Per http://getasysadmin.com/2011/06/Amazon-rds-super-privileges/ müssen Sie log_bin_trust_function_creators bis 1 in AWS-Konsole , um Ihre Sicherungsdatei ohne Fehler zu laden.

Wenn Sie diese Fehler ignorieren und den Rest der Sicherungsdatei laden möchten, können Sie das -f Möglichkeit:

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

Das -f meldet Fehler, verarbeitet aber den Rest der Sicherungsdatei weiter.

49
Ross Smith II
  1. Öffnen Sie die RDS-Webkonsole.
  2. Öffnen Sie die Registerkarte "Parametergruppen".
  3. Erstellen Sie eine neue Parametergruppe. Wählen Sie im Dialogfeld die MySQL-Familie aus, die mit Ihrer MySQL-Datenbankversion kompatibel ist, geben Sie einen Namen ein und bestätigen Sie die Auswahl. Wählen Sie die gerade erstellte Parametergruppe aus und geben Sie "Edit Parameters" ein.
  4. Suchen Sie nach dem Parameter "log_bin_trust_function_creators" und setzen Sie den Wert auf "1".
  5. Speichern Sie die Änderungen.
  6. Öffnen Sie die Registerkarte "Instances". Erweitern Sie Ihre MySQL-Instanz und setzen Sie die "Instanzaktion" mit dem Namen "Ändern" ab.
  7. Wählen Sie die gerade erstellte Parametergruppe aus und aktivieren Sie „Sofort anwenden“.
  8. Klicken Sie auf "Weiter" und bestätigen Sie die Änderungen.
  9. Warten Sie, bis der Vorgang "Ändern" abgeschlossen ist.
  10. Öffnen Sie erneut die Registerkarte "Instances". Erweitern Sie Ihre MySQL-Instanz und die Registerkarte "Instance Action" und wählen Sie "Reboot".
103
arun-r

Das Problem mit Auslösern und gespeicherten Prozeduren in der Speicherauszugsdatei besteht darin, dass diese Definitionen den Benutzer enthalten, von dem die gespeicherte Prozedur erstellt werden soll, den DEFINER. Der Benutzer ist höchstwahrscheinlich nicht im RDS vorhanden, daher wird ein Fehler ausgegeben. Um die Dump-Datei laden zu können, können Sie den DEFINER mit sed oder Perl entfernen und die gespeicherte Prozedur/den Trigger mit dem Benutzer erstellen, der den Import ausführt.

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

Jetzt sollten Sie in der Lage sein, die feste Speicherauszugsdatei zu laden

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

Wie bereits in der vorherigen Antwort erwähnt, sollten Sie den DB-Parameter einstellen:

log_bin_trust_function_creators = 1
29
anders

Gemäß der Definition in der AWS-Dokumentation sind Trigger, Prozeduren und Funktionen standardmäßig deaktiviert, da die binäre Protokollierung standardmäßig aktiviert ist. Durch Deaktivieren wird Ihre Datenbank im Grunde genommen sicherer. Wenn Sie jedoch ordnungsgemäß über das Netzwerk gesichert haben, spielt dies keine Rolle.

Befolgen Sie diese Schritte und Ihr Problem wird behoben https://aws.Amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/

Außerdem sollten Sie beim Erstellen von Prozeduren keine Definierer verwenden. Ein einfacher sed Befehl kann es entfernen.

5
Josh Woodcock

Neben der Bearbeitung

log_bin_trust_function_creators = 1

sie müssen alle [~ # ~] Definierer [~ # ~] aus Ihrer Speicherauszugsdatei entfernen Folgender Link für den Befehl [~ # ~] sed [~ # ~], mit dem Sie Ihre SQL-Dump-Datei bereinigen können .

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

4
Jubba Smail

Für mich gab es nur 2 Befehle in meiner Dump-Datei, die SUPER-Berechtigungen erforderten:

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

Laut mysqldump docs können Sie diese mit --set-gtid-purged=OFF Deaktivieren.

Dann schau auf man mysqldump :

Verwenden Sie ON, wenn ein neuer Replikations-Slave bereitgestellt werden soll, der nur einen Teil der Daten vom ausgelagerten Server verwendet. Verwenden Sie OFF, wenn Sie eine Tabelle reparieren möchten, indem Sie sie in eine Topologie kopieren. Verwenden Sie OFF, wenn eine Tabelle zwischen Replikationstopologien kopiert werden soll, die nicht zusammengeführt sind und dies auch bleiben sollen.

Daher habe ich beschlossen, meinem Befehl mysqldump--set-gtid-purged=OFF Hinzuzufügen, und dann konnte ich die resultierende Speicherauszugsdatei erfolgreich importieren.

1
Yep_It's_Me

Wenn das Problem nach der Verwendung von arun-r answer nicht behoben ist, müssen Sie Ihre Sicherungsdatei ändern. Es ist einfach.

In der Dump-Datei finden Sie Zeilen wie:

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

Sie müssen ersetzen:

  • username_from_dumped_database mit deinem Benutzernamen in der rds-Datenbank.
  • Host_from_dumped_databse durch %

Ich weiß nicht warum, aber dieser Trick hat bei mir funktioniert. Dazu reicht ein einfacher Texteditor.

0
Damien Frances