MySQLアップグレードでレプリカのIDがずれ、本番でデータ不整合が発生
A safe MySQL upgrade that wasn't so safe
MySQLのバージョンアップグレード後、レプリカ上の特定テーブルでAUTO_INCREMENT列のIDがソースと異なる順序で割り当てられる問題が発生。5つの関連テーブルは正しく新しいIDを参照したが、1つのテーブルだけが古いIDを参照し、データの不整合を引き起こした。原因はbinlog_formatがMIXEDで、一部のUPDATE文がROW形式でログされ、レプリカで直接行変更が適用されたため。AUTO_INCREMENT列の追加がレプリケーションで安全でないケースがあることを示す実体験の報告。
AUTO_INCREMENT列を追加すると、ソースとレプリカで行のIDが異なる順序で割り当てられる可能性があるというMySQLのドキュメントの指摘は、まさにその通りだった。
HNでの議論
19- Insimwytim
それはちょっと面白いですね(面白くない意味で)。アップデートがAWS RDSによって半自動で行われるので、AWSはそれに対して責任を取るのでしょうか?このユースケースが移行ノートで警告されていない限り、彼らには責任があるべきだと思います。
- 190n
この問題がアップグレード後にだけ現れて、カラムを追加する移行直後に現れなかったのはなぜか理解できません。
- krautburglar
レプリカ間でbinlogフォーマットを混在させるのは、ユーザーエラーだと思います。