HeadlinesBriefing favicon HeadlinesBriefing.com

MySQL-Replikat-Upgrade-Fehler: AUTO_INCREMENT-Unstimmigkeit

Hacker News •
×

Ein routinemäßiges MySQL-Upgrade auf AWS RDS löste ein stilles Datenkorruptionsproblem aus, als ein grüner Replikat hochgestuft wurde. Nach dem Upgrade des Replikats und der Überprüfung seiner Funktionalität wechselte der Autor den Datenverkehr. Eine Stunde später trat ein kritischer Fehler auf: Eine Tabelle (Tabelle X) hatte ihre Auto-Inkrement-IDs in einer anderen Reihenfolge auf dem Replikat im Vergleich zur Quelle zugewiesen bekommen. Die Zeile, die zuvor die ID 1 hatte, hatte jetzt die ID 26.

Die Ursache geht auf eine frühere Migration zurück, die der Tabelle X über `ALTER TABLE X ADD COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY` einen AUTO_INCREMENT-Primärschlüssel hinzufügte. Sechs verwandte Tabellen wurden aktualisiert, um auf diese neue ID mittels JOIN-basierter UPDATE-Anweisungen zu verweisen. Allerdings warnt die MySQL-Dokumentation davor, dass das Hinzufügen von AUTO_INCREMENT-Spalten zu replizierten Tabellen je nach Speicher-Engine und Verarbeitungsreihenfolge zu unterschiedlichen Zeilenreihenfolgen auf Quelle und Replikat führen kann.

Die Diskrepanz zeigte sich aufgrund des `binlog_format=MIXED` der Quelldatenbank. Fünf Tabellen replizierten ihre UPDATE-Anweisungen im STATEMENT-Modus, wodurch das Replikat den JOIN anhand seiner lokalen (unterschiedlichen) ID-Werte erneut ausführte — wodurch die Referenzen korrekt zugeordnet wurden. Aber die sechste Tabelle, die ebenfalls eine AUTO_INCREMENT-Spalte besaß, wurde als unsicher für statementbasierte Replikation eingestuft und im ROW-Modus protokolliert. Das Replikat wendete die rohen Zeilenänderungen aus der Quelle an und kopierte die von der Quelle generierten `x_id`-Werte, die jetzt auf falsche Zeilen im Replikat zeigten.

Diese subtile Wechselwirkung zwischen der Reihenfolge der AUTO_INCREMENT-Zuweisung, der MIXED-Binärprotokollierung und der Erkennung unsicherer Anweisungen führte zu einem stillen Referenzintegritätsversagen. Der Autor warnt davor, dass solche Probleme während Upgrades leicht übersehen werden können, aber Daten schnell korrumpieren können.

Wichtige Entitäten: Unternehmen: AWS, MySQL