Errant-GTID-Transaktionen finden und neutralisieren
MySQLReplikationBefehl
-- 1) On the source: get gtid_executed
SELECT @@GLOBAL.gtid_executed;
-- 2) On the replica: GTIDs missing on the source (empty result = clean)
SELECT GTID_SUBTRACT(@@GLOBAL.gtid_executed,
'af6bc361-c353-11f1-8f12-f69e63ad6c0e:1-13') AS errant_gtids;
-- 3) If the content is harmless: commit an empty transaction per errant GTID on the source
SET GTID_NEXT = 'b030e5a6-c353-11f1-a887-523817ec642a:1'; BEGIN; COMMIT;
SET GTID_NEXT = 'b030e5a6-c353-11f1-a887-523817ec642a:2'; BEGIN; COMMIT;
SET GTID_NEXT = 'AUTOMATIC';Was es tut
Erkennt per GTID-Mengendifferenz Transaktionen, die direkt auf einer Replica ohne Gegenstück auf der Quelle ausgeführt wurden (errant), und gleicht die GTID-Mengen in der Topologie an, indem sie auf der Quelle mit leeren Transaktionen markiert werden.
Wann einsetzen
Als routinemäßige Prüfung vor Failover / Switchover; wenn Orchestrator oder MySQL Shell sich wegen Errant GTIDs weigert, eine Replica hochzustufen, oder eine Replica beim Anhängen an eine neue Quelle mit 1236 fehlschlägt.
Vorsicht
Finde zuerst aus dem Binlog der Replica heraus, was die Errant-Transaktion getan hat (mysqlbinlog --include-gtids=...). Hat sie Daten geändert, überdeckt die leere Transaktion nur die GTID und der Datenunterschied bleibt; baue die Replica neu auf (CLONE) oder gleiche die Daten manuell an. Auf der Quelle committete leere Transaktionen verbreiten sich auf jede Replica; das ist beabsichtigt. Halte super_read_only=ON auf Replicas, um eine Wiederholung zu verhindern.