HeadlinesBriefing favicon HeadlinesBriefing.com

Bug de mise à niveau de réplique MySQL : désynchronisation AUTO_INCREMENT

Hacker News •
×

Une mise à niveau routinière de MySQL sur AWS RDS a déclenché un problème de corruption de données silencieuse lors de la promotion d'une réplique verte. Après avoir mis à niveau la réplique et vérifié sa fonctionnalité, l'auteur a basculé le trafic. Une heure plus tard, un bogue critique est apparu : une table (table X) avait ses IDs d'auto-incrémentation attribués dans un ordre différent sur la réplique par rapport à la source. La ligne qui détenait auparavant l'ID 1 détenait maintenant l'ID 26.

La cause profonde remonte à une migration précédente qui a ajouté une clé primaire AUTO_INCREMENT à la table X via `ALTER TABLE X ADD COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY`. Six tables connexes ont été mises à jour pour référencer ce nouvel ID à l'aide d'instructions UPDATE basées sur des JOIN. Cependant, la documentation MySQL avertit que l'ajout de colonnes AUTO_INCREMENT aux tables répliquées peut produire un ordre de lignes différent sur la source et la réplique, selon le moteur de stockage et l'ordre de traitement.

L'écart s'est manifesté en raison du format de journal binaire de la base de données source `binlog_format=MIXED`. Cinq tables ont répliqué leurs instructions UPDATE en mode STATEMENT, ce qui a provoqué la réplique à réexécuter le JOIN par rapport à ses valeurs d'ID locales (différentes) — correctement mappant les références. Mais la sixième table, qui possédait également une colonne AUTO_INCREMENT, a été jugée dangereuse pour la réplication basée sur les instructions et journalisée en mode ROW. La réplique a appliqué les modifications de ligne brutes provenant de la source, copiant les valeurs `x_id` générées par la source qui pointaient maintenant vers des lignes incorrectes sur la réplique.

Cette interaction subtile entre l'ordre d'attribution de AUTO_INCREMENT, la journalisation binaire MIXED et la détection d'instructions dangereuses a entraîné une défaillance silencieuse d'intégrité référentielle. L'auteur prévient que de tels problèmes sont faciles à négliger lors des mises à niveau, mais peuvent rapidement corrompre les données.

Entités clés : Entreprises : AWS, MySQL