Wie kann ich einen Fehler beheben, den ich bei der Verwendung von mysqldump auf Amazon RDS for MySQL oder MariaDB erhalten habe?

Lesedauer: 4 Minute
0

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:

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?