Wie behebe ich einen Fehler in mysqldump auf Amazon RDS MySQL oder MariaDB?
Ich möchte einen Fehler beheben, wenn ich mysqldump auf Amazon Relational Database Service (Amazon RDS) verwende, um Daten zu importieren oder zu exportieren.
Lösung
Wähle eine der folgenden Methoden, um deinen Fehler zu beheben:
Den Fehler „FLUSH TABLES WITH READ LOCK“ beheben
Wenn du mysqldump verwendest, um Daten mit der Option --master-data zu exportieren, erhältst du folgende Fehlermeldung:
„mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'user'@'%' (using password: YES) (1045)“
Die Option --master-data erwirbt einen FLUSH TABLES WITH READ LOCK. Dies erfordert SUPER-Berechtigungen, über die der primäre Amazon RDS-Benutzer nicht verfügt. Amazon RDS unterstützt GLOBAL READ LOCK nicht. Wenn MySQL einen CHANGE MASTER TO-Befehl ausführt, zeichnet die mysqldump-Datei den Namen und die Position der binären Protokolldatei auf. Weitere Informationen findest du unter ER_ACCESS_DENIED_ERROR auf der MySQL-Website.
Um diesen Fehler zu beheben, entferne die Option --master-data. Wenn du diese Option entfernst, enthält der mysqldump keine exakte Protokollposition. Um dieses Problem zu umgehen, erstelle den mysqldump, nachdem du deine Anwendung gestoppt hast, oder erstelle den mysqldump von einer Amazon RDS-Lesereplikat-Instance (Read Replica). Dadurch erhältst du die exakte Protokollposition, wenn du den Befehl SHOW SLAVE STATUS ausführst. Wenn du die Replikat-Instance stoppst, ändern sich die Binlog-Positionen nicht.
Führe die folgenden Schritte aus, um einen mysqldump von einer Lesereplikat-Instance zu erstellen:
-
Lege einen Wert für die Aufbewahrung des binären Protokolls fest.
-
Um die Replikation zu stoppen, führe den folgenden Befehl auf der Lesereplikat-Instance aus:
CALL mysql.rds_stop_replication; -
Erstelle den mysqldump ohne --master-data=2 aus der Lesereplikat-Instance.
-
Um die Position des binären Protokolls zu erhalten, führe den folgenden Befehl auf der Replikat-Instance aus:
SHOW SLAVE STATUS; -
Kopiere die Werte von Master_Log_File und Exec_Master_Log_Pos aus der Ausgabe.
Hinweis: Weitere Informationen zur Verwendung dieser Werte findest du unter Konfigurieren der Replikation der Binärprotokolldateiposition mit einer externen Quell-Instance. -
Wenn du die Replikat-Instance für deine Anwendung verwendest, führe den folgenden Befehl aus, um die Replikation zu starten:
CALL mysql.rds_start_replication;Hinweis: Wenn du das Replikat nicht für deine Anwendung verwendest, kannst du das Replikat löschen.
max_allowed_packet-Fehler beheben
Wenn der mysqldump-Befehl ein Paket anfordert, das größer ist als der Wert des Parameters max_allowed_packet auf deiner RDS-DB-Instance, erhältst du folgende Fehlermeldung:
„mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table XXXX at row: XXXX“
Weitere Informationen findest du unter Packet too large (Paket zu groß) auf der MySQL-Website.
Um diesen Fehler zu beheben, erhöhe den globalen Wert für max_allowed_packet oder konfiguriere max_allowed_packet im mysqldump für diese Sitzung. Führe beispielsweise den folgenden Befehl aus:
mysqldump --max-allowed-packet=128M -h hostname -u username -p database_name > dump.sql
Hinweis: Ersetze hostname durch deinen RDS-DB-Instance-Endpunkt, username durch deinen Datenbankbenutzer und database_name durch den Namen deiner Datenbank.
SUPER-Berechtigungen und DEFINER-Fehler beheben
Wenn die mysqldump-Datei auf DEFINER-Benutzer oder SUPER-Berechtigungen verweist, die auf deiner RDS-DB-Instance nicht verfügbar sind, erhältst du die folgende Fehlermeldung:
„Error: 1227 SQLSTATE: 42000 (ER_SPECIFIC_ACCESS_DENIED_ERROR) Access denied; you need (at least one of) the %s privilege(s) for this operation“
Gehe wie folgt vor, um diesen Fehler zu beheben:
- Überprüfe, ob bei deiner Ziel-RDS-DB-Instance das binäre Protokoll mit einer Backup-Aufbewahrungsdauer von mehr als 0 aktiviert ist. Dieser Fehler tritt auf, wenn die mysqldump-Datei ein Objekt wie einen Trigger, eine View, eine Funktion oder ein Event enthält. Weitere Informationen findest du unter Wie behebe ich 1227- und Definer-Fehler, wenn ich mysqldump verwende, um Daten in meine Amazon RDS für MySQL-DB-Instance zu importieren?
- Überprüfe, ob die mysqldump-Datei kein Objekt mit einem DEFINER-Attribut-Benutzer erstellt, der in deiner RDS-DB-Instance nicht existiert. Überprüfe außerdem, ob der Attribut-Benutzer über die erforderlichen SUPER-Benutzerberechtigungen verfügt.
- Stelle sicher, dass der Befehl für die in der Fehlermeldung referenzierte Zeile keine SUPER-Berechtigungen erfordert, die deine RDS-DB-Instance nicht bereitstellt.
Verbindungsfehler beheben
Weitere Informationen zur Ursache und Behebung dieses Fehlers findest du unter Wie behebe ich den Fehler „MySQL server has gone away“, wenn ich eine Verbindung zu meiner DB-Instance von Amazon RDS MySQL herstelle?
Ähnliche Informationen
mysqldump auf der MySQL-Website
- Themen
- Database
- Sprache
- Deutsch
