it-swarm.asia

Dalam replikasi MySQL Master / Slave, apa yang akan terjadi jika saya menulis ke Slave?

Beberapa pertanyaan

  • Apakah entri Slave tetap sampai ada sisipan/perbarui/hapus ke tabel pada Master yang dapat memengaruhi Slave?

  • Jika tidak, bagaimana cara memastikan bahwa Slave tidak sinkron dengan Master yang akan datang (baik dengan menghapus entri Slave atau menyalin entri itu ke Master secara manual)?

  • Yang paling penting, bagaimana cara mendeteksi bahwa tabel tidak sinkron?

17
kfmfe04

Selama Anda tidak melakukan pernyataan INSERT/UPDATE/DELETE langsung pada Slave, Slave Anda seharusnya baik-baik saja. Jika tidak, Replikasi MySQL dapat rusak jika Anda menyisipkan baris baru di mydb.mytable pada Slave dan, melalui Replication, Slave kemudian mendeteksi INSERT dari baris ke mydb.mytable dengan KUNCI UTAMA yang sama. Ini menghasilkan kesalahan 1062 (Duplicate Key).

Satu-satunya cara Anda dapat menulis ke Slave tanpa melanggar Replikasi MySQL adalah ini:

  • Master memiliki basis data db1, db2, db3
  • Slave mereplikasi basis data db1, db2, db3 dari Master
  • Kamu lari CREATE DATABASE db4; pada Budak
  • Anda melakukan INSERT/PEMBARUAN/HAPUS hanya untuk db4 pada Slave
  • Anda tidak melakukan INSERT/PEMBARUAN/HAPUS hanya untuk db1, db2, db3 pada Slave

Untuk mendeteksi Master dan Budak yang tidak sinkron tanpa mengunduh alat apa pun, pilih tabel apa saja dan jalankan PERIKSA TABEL terhadap tabel pada salinan Master dan Slave dari tabel yang sama.

[~ # ~] contoh [~ # ~]

Jika Anda memiliki tabel mydb.mytable, jalankan perintah untuk melawannya:

mysql> CHECKSUM TABLE mydb.mytable;

Jika nilai tidak kembali sama, maka ada sesuatu yang tidak sinkron.

Jika Anda ingin memeriksa banyak meja secara massal, Anda dapat menelusuri MAATKIT Percona. Anda akan membutuhkan dua alat khusus (Percona juga memiliki Percona Toolkit yang mereka ambil sendiri dari MAATKIT yang sekarang sedang dipromosikan lebih lanjut)

atau

pt-table-checksum akan melakukan TABEL CHECKSUM terhadap semua tabel pada Master dan Slave. Anda dapat mengkonfigurasinya untuk melakukan semua database hanya pada yang spesifik.

pt-table-sync dapat dijalankan pada Budak melawan tabel apa pun. Dengan menggunakan opsi --print dan --sync-to-master, Anda bisa melihat pernyataan SQL apa yang perlu dijalankan pada Slave agar cocok dengan Master. Alat ini tidak berfungsi dengan tabel yang tidak memiliki KUNCI UTAMA atau KUNCI UNIK.

Saya telah menggunakan MAATKIT selama bertahun-tahun. Aku masih melakukan. Saya belum mencoba Percona Toolkit, tetapi saya yakin kualitasnya harus sama dengan MAATKIT.

14
RolandoMySQLDBA