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

17

Beberapa pertanyaan

  • Akankah 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?

kfmfe04
sumber
tolong jelaskan pertanyaan Anda dengan benar ...
Abdul Manaf
1
Bukankah hubungan master / slave sinkronisasi satu arah dari master ke slave, tetapi tidak sebaliknya? Saya bertanya apa yang akan terjadi jika Anda menulis kepada budak dalam pengaturan seperti ini.
kfmfe04

Jawaban:

14

Selama Anda tidak melakukan pernyataan INSERT / UPDATE / DELETE langsung pada Slave, Slave Anda akan 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 (Kunci Duplikat).

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
  • Anda menjalankan CREATE DATABASE db4;Slave
  • 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 tidak sinkron tanpa mengunduh alat apa pun, pilih tabel apa saja dan jalankan CHECKSUM TABLE dengan tabel pada Master dan salinan Slave dari tabel yang sama.

CONTOH

Jika Anda memiliki tabel mydb.mytable, jalankan perintah yang menentangnya:

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-checksumakan melakukan TABEL CHECKSUM terhadap semua tabel di Master dan Slave. Anda dapat mengonfigurasinya untuk melakukan semua database hanya pada yang spesifik.

pt-table-syncdapat 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.

RolandoMySQLDBA
sumber
untuk jawaban terinci. Saya pikir saya punya lebih banyak pertanyaan, tetapi saya pikir jawaban Anda telah mencakup semua kasus (pt-table-sync tampaknya sangat berguna).
kfmfe04