ASPEK # 1: Replikasi
Saya tidak berpikir begitu
replicate-wild-do-table = db_backup.%
replicate-rewrite-db = db->db_backup
milik bersama.
Orang lain juga bertanya-tanya tentang hal ini
Masalahnya berasal dari aturan replikasi pesanan diproses. Menurut Dokumentasi MySQL tentang Aturan Replikasi :
Jika ada opsi --replicate-rewrite-db yang ditentukan, mereka diterapkan sebelum aturan --replicate- * filtering diuji.
Bahkan Dokumentasi MySQL pada replicate-rewrite-db mengatakan:
Terjemahan nama database dilakukan sebelum aturan --replicate- * diuji.
The replicate-wild-do-table
diberlakukan setelah menulis ulang. Tidak akan mengejutkan jika pemesanan ini entah bagaimana memaksakan INSERT ke dalam tabel yang sudah memiliki data.
Anda mungkin bertanya bagaimana data sampai di sana?
ASPEK # 2: mysqldump
Melakukan hal mysqldump --single-transaction
itu tampaknya merupakan cara terbaik untuk melakukan dump data secara point-in-time. Sayangnya, mysqldump --single-transaction
memiliki Heel Achilles': ALTER TABLE
. Jika tabel tunduk pada ALTER TABLE
perintah apa pun , seperti a DROP TABLE
dan CREATE TABLE
, yang dapat merusak integritas transaksi, mysqldump mencoba melakukan dump. Memotong tabel (yang merupakan DDL di MySQL Universe) dan menjatuhkan dan menambahkan indeks dapat juga mengganggu.
Anda dapat menemukan informasi lebih lanjut tentang hal itu dari Best MySQLDump Secret disimpan Blog Kinerja MySQL . Saya benar-benar membahas hal ini dalam pertanyaan terakhir yang menggambarkan 12 perintah yang dapat merusak integritas transaksi mysqldump: cadangan MySQL InnoDB
CAVEAT
EPILOG
Salah satu atau kedua aspek mungkin telah berkontribusi membiarkan baris tergelincir selama mysqldump yang seharusnya tidak ada karena aturan penulisan ulang atau isolasi mysqldump ditimpa.
SARAN
Saya akan melakukan dump mysqlbinlog dari semua log relai sejak awal mysqldump untuk melihat semua INSERT yang akan diproses oleh Slave dan lihat apakah baris-baris itu sudah ada pada Slave. Jika ya, Anda mungkin dapat melakukan dua hal:
1: Lewati semua kesalahan Duplikat Kunci
Cukup tambahkan ini ke my.cnf di Slave
[mysqld]
slave-skip-errors=1062
skip-slave-start
dan mulai kembali mysql. Lalu lariSTART SLAVE;
semua kesalahan kunci duplikat akan dilewati. Ketika Seconds_Behind_Master
sampai ke 0, hapus baris-baris itu dan restart mysql.
2: Unduh alat percona
Alat yang Anda butuhkan adalah
Gunakan ini untuk menemukan perbedaan dalam Budak, dan kemudian memperbaikinya