Wie kann ich einen Fehler beheben, den ich bei der Verwendung von mysqldump auf Amazon RDS for MySQL oder MariaDB erhalten habe?
Ich verwende eine Amazon Relational Database Service (Amazon RDS)-DB-Instance, auf der MySQL oder MariaDB ausgeführt wird. Ich verwende mysqldump, um Daten zu importieren oder zu exportieren, und ich erhalte eine Fehlermeldung. Wie behebe ich diesen Fehler?
Kurzbeschreibung
Bei der Verwendung von mysqldump können die folgenden Fehler auftreten:
- FLUSH TABLES WITH READ LOCK-Fehler konnten nicht ausgeführt werden
- Max_allowed_packet errors
- SUPER-Privileg(ien) und DEFINER-Fehler
- Fehler bei verlorener oder abgebrochener Verbindung
Behebung
FLUSH TABLES WITH READ LOCK-Fehler konnte nicht ausgeführt werden
Wenn Sie die Option --master-data mit mysqldump verwenden, um Daten zu exportieren, erhalten Sie möglicherweise eine Fehlermeldung ähnlich der folgenden:
„mysqldump: 'FLUSH TABLES WITH READ LOCK' konnte nicht ausgeführt werden: Zugriff verweigert für Benutzer 'user'@'%' (mit Passwort: JA) (1045)“
Die Option**--master-data** erwirbt einen FLUSH TABLES WITH READ LOCK. Dies erfordert SUPER-Rechte, die der Amazon RDS-Master-Benutzer nicht hat, und Amazon RDS unterstützt GLOBAL READ LOCK nicht. Wenn MySQL eine CHANGE MASTER TO-Anweisung ausführt, um Protokoll-Informationen abzurufen, werden der Name und die Position der Binärlogdatei (Koordinaten) in der mysqldump-Datei aufgezeichnet. Weitere Informationen finden Sie in der MySQL-Dokumentation für ER_ACCESS_DENIED_ERROR.
Um diesen Fehler zu beheben, entfernen Sie die Option --master-data. Wenn Sie diese Option entfernen, erhalten Sie keine genaue Protokoll-Position im Mysqldump. Um dieses Problem zu umgehen, nehmen Sie entweder den mysqldump, wenn Ihre Anwendung gestoppt wird, oder nehmen Sie den mysqldump aus einem Amazon RDS-Read-Replikat. Auf diese Weise können Sie die genaue Protokoll-Position abrufen, indem Sie SHOW SLAVE STATUS ausführen, da das Stoppen des Replikats bestätigt, dass sich die Binlog-Positionen nicht ändern. Gehen Sie wie folgt vor, um einen mysqldump aus einem Amazon RDS MySQL-Read-Replikat dieser RDS-DB-Instance zu erstellen.
1.Legen Sie einen Wert für die Aufbewahrung des Binärprotokolls fest.
2.Stoppen Sie die Replikation, indem Sie den folgenden Befehl auf dem Read-Replikat ausführen:
CALL mysql.rds_stop_replication;
3.Nehmen Sie den mysqldump ohne**--master-data=2** aus dem Read-Replikat.
4.Führen Sie SHOW SLAVE STATUS auf dem Replikat aus und erfassen Sie die Master_Log_File und Exec_Master_Log_Pos.
5.Wenn Sie das Replikat für Ihre Anwendung verwenden, starten Sie die Replikation erneut, indem Sie die folgende gespeicherte Prozedur verwenden:
CALL mysql.rds_start_replication;
Wenn Sie das Replikat nicht für Ihre Anwendung verwenden, können Sie es löschen.
Max_allowed_packet errors
Wenn Sie mysqldump zum Exportieren von Daten verwenden, erhalten Sie möglicherweise eine Fehlermeldung ähnlich der folgenden:
„Fehler 2020: Ich habe ein Paket erhalten, das größer als 'max_allowed_packet' Byte ist, wenn die Tabelle `tb_name` in der Zeile gespeichert wurde: XX“
Dieser Fehler tritt auf, wenn der Befehl mysqldump ein Paket anfordert, das größer ist als der Wert des Parameters max_allowed_packet, der für Ihre RDS-DB-Instance festgelegt ist. Weitere Informationen finden Sie in der MySQL-Dokumentation für Packet too large.
Um max_allowed_packet-Fehler zu beheben, erhöhen Sie den globalen Wert für max_allowed_packet oder konfigurieren Sie den Wert max_allowed_packet im mysqldump für diese Sitzung (und nicht global für die gesamte Datenbank). Sie können den Befehl beispielsweise wie folgt ändern:
$ mysqldump --max_allowed_packet=1G ......
SUPER-Privileg(ien) und DEFINER-Fehler
Wenn Sie mysqldump verwenden, um Daten in eine RDS-DB-Instance zu importieren, auf der MySQL oder MariaDB ausgeführt wird, erhalten Sie möglicherweise eine Fehlermeldung ähnlich der folgenden:
„FEHLER 1227 (42000) in Zeile XX: Zugriff verweigert; für diesen Vorgang benötigen Sie (mindestens ein) SUPER-Privileg(ien)“
Dieser Fehler weist auf eines oder mehrere der folgenden Probleme hin:
- Für Ihre Ziel-RDS-DB-Instance ist das Binärprotokoll aktiviert (Aufbewahrungszeitraum für Backups > 0), und die mysqldump-Datei enthält ein Objekt, z. B. einen Trigger, eine Ansicht, eine Funktion oder ein Ereignis. Weitere Informationen finden Sie unter Wie kann ich den FEHLER 1227 beheben, wenn ich Replikation oder automatische Backups auf einer Amazon RDS MySQL-Instance aktiviere?
- Die mysqldump-Datei, die Sie importiert haben, hat versucht, ein Objekt mit einem DEFINER-Attributbenutzer zu erstellen, der in Ihrer RDS-DB-Instance nicht existiert, oder Sie haben versucht, einen Attributbenutzer zu erstellen, der nicht über die erforderlichen SUPER-Benutzerrechte verfügt. Weitere Informationen finden Sie unter Wie kann ich Definer-Fehler beheben, wenn ich Daten mit mysqldump in meine Amazon RDS for MySQL-Instance importiere?
- Der Befehl für die Zeile, auf die in der Fehlermeldung verwiesen wird, erfordert SUPER-Privilegien, die in RDS-DB-Instances nicht bereitgestellt werden.
Fehler bei verlorener oder abgebrochener Verbindung
Wenn Sie mysqldump zum Importieren von Daten verwenden, erhalten Sie möglicherweise eine Fehlermeldung ähnlich der folgenden:
„mysqldump: Fehler 2013: Die Verbindung zum MySQL-Server wurde während der Abfrage beim Dumping der Tabelle unterbrochen“
--oder--
„mysqldump: Verbindung XXXXXX zu db: 'db_name' user: 'master_user' Host: 'XXXXXXX' (Beim Schreiben von Kommunikationspaketen wurde eine Zeitüberschreitung festgestellt)“
Weitere Informationen zur Ursache und Behebung dieses Fehlers finden Sie unter Wie behebe ich den Fehler „MySQ-Server ist verschwunden“, wenn ich eine Verbindung zu meiner Amazon RDS MySQL-DB-Instance herstelle?
Ähnliche Informationen
MySQL-Dokumentation für mysqldump
Wie aktiviere ich Funktionen, Prozeduren und Trigger für meine Amazon RDS for MySQL-DB-Instance?
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren