Fehler bei eingehender Replikation beheben

Fehler bei eingehender Replikation beheben

Isolieren Sie Fehler bei der Inbound-Replikation, indem Sie Informationen zur Inbound-Replikation abrufen.

MySQL-Shell verwenden

Verwenden Sie die Shell MySQL oder ein MySQL-Clientprogramm, um Informationen zur eingehenden Replikation abzurufen.

Diese Aufgabe erfordert Folgendes:
  • Ein ausgeführtes DB-Systemreplikat.
  • MySQL Shell oder ein MySQL-Clientprogramm, das mit dem Replikat-DB-System verbunden ist.
Führen Sie einen oder mehrere der folgenden Befehle für das DB-Systemreplikat aus, um Informationen zur eingehenden Replikation abzurufen:
  • SHOW REPLICA STATUS \G

    Zeigt Statusinformationen zu wesentlichen Parametern der Replikatthreads an. Siehe SHOW REPLICA STATUS.

  • SELECT * FROM performance_schema.replication_connection_status \G

    Zeigt den aktuellen Status des I/O-Threads an, der die Verbindung des Replikats mit der Quelle verarbeitet. Siehe replication_connection_status.

  • SELECT * FROM performance_schema.replication_applier_status_by_worker \G

    Zeigt Details der Transaktionen an, die von Applier-Threads auf einem Replikat verarbeitet werden. Siehe replication_applier_status_by_worker.

Eingehende Replikation - Empfängerfehlercodes

In dieser Tabelle werden einige der allgemeinen Empfängerfehlercodes für die eingehende Replikation angezeigt.

Tabelle 22-4: Empfängerfehlercodes bei eingehenden Replikationen

Fehlercode Beschreibung
MY-1045: ER_ACCESS_DENIED_ERROR; Access denied for user '%s'@'%s'
  • Der Benutzername oder das Kennwort für die Quelle ist falsch. Prüfen Sie die Zugangsdaten.
  • Der Benutzer ist nicht berechtigt, auf die Quelle zuzugreifen Prüfen Sie die Quelle, und stellen Sie sicher, dass der Replikationsbenutzer korrekt konfiguriert ist.
MY-1227 (42000): Access denied; you need (at least one of) the SUPER or SET_USER_ID privilege(s) for this operation Sie haben folgende Möglichkeiten:
  • Geben Sie denselben Benutzernamen in DEFINER und Applier-Benutzernamen an. Sie benötigen die Berechtigung SET_USER_ID nur, wenn die Benutzernamen in DEFINER und Applier-Benutzername unterschiedlich sind. Siehe Replikationskanal erstellen.
  • Wenden Sie sich an Oracle Support, um dem Applier-Benutzernamen die Berechtigung SET_USER_ID zu erteilen.
MY-1236: ER_MASTER_FATAL_ERROR_READING_BINLOG Got fatal error %d from master when reading data from binary log: '%s' Siehe Schwerwiegenden Fehler 1236 beheben.
MY-2003: Network connection has been refused Hostname und Port sind falsch, oder die Quelle wird nicht ausgeführt. Prüfen Sie den definierten Hostnamen und Port, und vergewissern Sie sich, dass die Quelle ausgeführt wird.
MY-3159: ER_SECURE_TRANSPORT_REQUIRED Connections using insecure transport are prohibited while --require_secure_transport=ON Die Quelle erfordert eine sichere Verbindung. Vergewissern Sie sich, dass Sie bei der Definition des Kanals eine der SSL-Optionen ausgewählt haben.
Die vollständige Liste der MySQL-Fehlermeldungen finden Sie unter Referenz zu Serverfehlermeldungen.

Eingehende Replikation - Applier-Fehlercodes

In dieser Tabelle werden einige der häufigsten Applier-Fehlercodes für eingehende Replikationen angezeigt.

Tabelle 22-5: Applier-Fehlercodes bei eingehenden Replikationen

Fehlercode Beschreibung
  • MY-1146: ER_NO_SUCH_TABLE;
  • MY-1032: HA_ERR_KEY_NOT_FOUND
  • MY-1062: HA_ERR_FOUND_DUPP_KEY
  • MY-1064: ERROR IN SQL syntax
  • MY-1050: ER_TABLE_EXISTS_ERROR
  • MY-1051: ER_BAD_TABLE_ERROR
  • MY-1146: ER_NO_SUCH_TABLE
  • MY-1007: ER_DB_CREATE_EXISTS
  • MY-1054: ER_BAD_FIELD_ERROR

Diese Fehler treten auf, wenn die Daten auf dem Replikat nicht mehr mit der Quelle synchronisiert sind. Dies kann beispielsweise geschehen, wenn die Daten auf dem Replikat manuell bearbeitet wurden.

Um diese Fehler zu beheben, müssen Sie die Quelle und das Replikat neu synchronisieren und den Replikationskanal wieder aktivieren.

MY-1205: ER_LOCK_WAIT_TIMEOUT Timeout überschritten. Um diesen Fehler zu beheben, nehmen Sie den Replikationskanal wieder auf. Siehe Kanäle wiederaufnehmen.
MY-1595/ MY-013121: RELAY LOG READ FAILURE Das Relay-Log ist beschädigt und kann nicht gelesen werden. Um diesen Fehler zu beheben, setzen Sie den Replikationskanal zurück. Siehe Kanäle zurücksetzen.
Die vollständige Liste der MySQL-Fehlermeldungen finden Sie unter Referenz zu Serverfehlermeldungen.

Schwerwiegenden Fehler 1236 beheben

Sie erhalten den Fehler, wenn entweder das GTID-Set aus dem logischen Dump nicht auf das DB-System angewendet wird oder die Binärlogs aus der Quelle gelöscht wurden. Binärlogs sind eine obligatorische Anforderung für Replikationen.

MySQL-Shell verwenden

Verwenden Sie die Shell MySQL, um den Fatal Error 1236 aufzulösen, der beim Ausführen der eingehenden Replikation angezeigt wird.

In dieser Aufgabe wird Folgendes angenommen:
  • Sie erhalten den schwerwiegenden Fehler Fatal Error 1236 beim Ausführen der eingehenden Replikation:
    Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting
          using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs
          containing GTIDs that the slave requires.

Im anfänglichen Verbindungs-Handshake sendet das Replikat (DB-System) ein GTID-Set mit den Transaktionen, die es bereits empfangen und/oder festgeschrieben hat. Die Quelle antwortet durch Senden aller in ihrem Binärlog aufgezeichneten Transaktionen, deren GTID nicht in dem vom Replikat gesendeten GTID-Set enthalten ist. Dieser Austausch stellt sicher, dass die Quelle nur Transaktionen mit einer GTID sendet, die das Replikat noch nicht erfasst oder festgeschrieben hat.

Gehen Sie wie folgt vor, um das Problem zu beheben:
  • Um das GTID-Set während des Ladevorgangs anzuwenden, verwenden Sie die Option updateGtidSet: "append" im MySQL Shell-Befehl loadDump(). Siehe MySQL Shell-Dumpladeutility.
  • Prüfen und erhöhen Sie die Ablauflogkonfiguration der Quelle, um sicherzustellen, dass ausreichend Zeit für die Übertragung der Daten in das Replikat vorhanden ist. Siehe binlog_expire_logs_seconds und expire_logs_days.

Replikat- und Quellsynchronisierungsprobleme beheben

Sie erhalten die Synchronisierungsprobleme, wenn das Replikat weit hinter der Quelle zurückgeblieben ist und die Replikation nicht wiederhergestellt werden kann.

Hinweis

Bevor Sie versuchen, eine Wiederherstellung nach diesem Fehler durchzuführen, sollten Sie unbedingt zuerst prüfen, warum der Fehler aufgetreten ist, und Korrekturmaßnahmen ergreifen.

MySQL-Shell verwenden

Verwenden Sie die Shell MySQL, um die Probleme bei der Replikat- und Quellsynchronisierung zu beheben.

In dieser Aufgabe wird Folgendes angenommen:
  • Die Quelle der eingehenden Replikation und das Replikat sind nicht mehr synchronisiert, das Replikat ist weit hinter der Quelle zurückgeblieben und die Replikation ist nicht wiederherstellbar.
Hinweis

Wenn die GTID-Werte der Quelle auf einen niedrigeren Wert als die Werte des Replikats zurückgesetzt werden, weil beispielsweise ein fehlerhaftes reset master für die Quelle ausgegeben wurde, kann die eingehende Replikation nicht wiederhergestellt werden. Erstellen Sie in diesem Szenario das DB-System und die Konfiguration der eingehenden Replikation neu.
Gehen Sie wie folgt vor, um das Replikat mit der Quelle neu zu synchronisieren:
  1. Stoppen Sie den vorhandenen Replikationskanal, und unterbrechen Sie alle Transaktionen in der Quelle.
  2. Exportieren Sie die Quelldaten in Object Storage. Siehe MySQL-Instanzen exportieren.
  3. Entfernen Sie ältere Datenbankobjekte und bereits vorhandene Datenbanken im Replikat.
  4. Importieren Sie den Dump aus Object Storage in das DB-System. Siehe Mit MySQL Shell importieren.
  5. Rufen Sie den Wert gtidExecuted aus dem Replikat ab.
  6. Rufen Sie den Wert gtidExecuted aus der Quelldumpdatei (@.json) ab.
  7. Vergleichen Sie den gtidExecuted-Wert des Replikats mit dem gtidExecuted-Wert des Quelldumps, um das gtidExecuted-Delta zu bestimmen.
    Beispiel: Wenn gtidExecuted des Quelldumps serverUUID: 1-2000 und gtidExecuted des Replikats serverUUID:1-1000 ist, lautet der Deltawert 1001-2000.
  8. Stellen Sie über die Befehlszeile eine Verbindung zum Replikat her, und wenden Sie das Delta mit der Stored Procedure CALL sys.SET_GTID_PURGED("+<ServerUUID>:<DeltaValue>) auf das Replikat an.
    Beispiel: Verwenden Sie den im vorherigen Beispiel gezeigten Deltawert:
    call sys.SET_GTID_PURGED("+<ServerUUID>:1001-2000")
  9. Aktivieren Sie nach Abschluss des Prozesses den Replikationskanal wieder.