HeadlinesBriefing favicon HeadlinesBriefing.com

Bug Pengupgradean Replika MySQL: Ketidaksesuaian AUTO_INCREMENT

Hacker News •
×

Pengupgradean rutin MySQL di AWS RDS memicu masalah korupsi data diam saat promosi replika hijau. Setelah melakukan upgrade pada replika dan memverifikasi fungsinya, penulis beralih ke lalu lintas. Sejam kemudian, muncul bug kritis: satu tabel (tabel X) memiliki ID auto-increment yang diberikan dalam urutan yang berbeda pada replika dibandingkan sumber. Baris yang sebelumnya memiliki ID 1 kini memiliki ID 26.

Penyebab utama terkait dengan migrasi sebelumnya yang menambahkan kunci primer AUTO_INCREMENT ke tabel X melalui `ALTER TABLE X ADD COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY`. Enam tabel terkait diperbarui untuk mereferensikan ID baru ini menggunakan pernyataan UPDATE berbasis JOIN. Namun, dokumentasi MySQL memperingatkan bahwa penambahan kolom AUTO_INCREMENT ke tabel yang direplikasi dapat menghasilkan urutan baris yang berbeda antara sumber dan replika tergantung pada mesin penyimpanan dan urutan pemrosesan.

Ketidaksesuaian ini terlihat karena format binlog basis data sumber `binlog_format=MIXED`. Lima tabel mereplikasi pernyataan UPDATE mereka dalam mode STATEMENT, menyebabkan replika menjalankan kembali JOIN terhadap nilai ID lokalnya (yang berbeda) — dengan benar memetakan referensi. Namun, tabel keenam, yang juga memiliki kolom AUTO_INCREMENT, dianggap tidak aman untuk replikasi berbasis pernyataan dan dicatat dalam mode ROW. Replika menerapkan perubahan baris mentah dari sumber, menyalin nilai `x_id` yang dihasilkan oleh sumber yang kini menunjuk ke baris yang salah pada replika.

Interaksi halus antara urutan penugasan AUTO_INCREMENT, pencatatan biner MIXED, dan deteksi pernyataan yang tidak aman menyebabkan kegagalan integritas referensial diam. Penulis memperingatkan bahwa masalah seperti ini mudah terlihat selama upgrade tetapi dapat segera merusak data.

Entitas Utama: Perusahaan: AWS, MySQL