NHIỆM VỤ # 1: Nhân rộng
Tôi không nghĩ rằng
replicate-wild-do-table = db_backup.%
replicate-rewrite-db = db->db_backup
thuộc về nhau.
Những người khác cũng đã tự hỏi về điều này là tốt
Vấn đề bắt nguồn từ các quy tắc sao chép đơn hàng được xử lý. Theo Tài liệu MySQL về Quy tắc nhân rộng :
Nếu bất kỳ tùy chọn --replicate-Rewrite-db nào được chỉ định, chúng sẽ được áp dụng trước khi các quy tắc lọc --replicate- * được kiểm tra.
Ngay cả Tài liệu MySQL về sao chép-viết lại-db cũng nói:
Việc dịch tên cơ sở dữ liệu được thực hiện trước khi các quy tắc --replicate- * được kiểm tra.
Việc replicate-wild-do-table
này được thi hành sau khi viết lại. Sẽ không có gì đáng ngạc nhiên nếu thứ tự này bằng cách nào đó áp đặt một CHERTN vào một bảng đã có dữ liệu.
Có lẽ bạn đang hỏi làm thế nào dữ liệu đạt được điều đó?
NHIỆM VỤ # 2: mysqldump
Làm mysqldump --single-transaction
dường như là cách tốt nhất để kết xuất dữ liệu theo thời gian. Thật không may, mysqldump --single-transaction
có một gót chân Achilles : ALTER TABLE
. Nếu một bảng tuân theo bất kỳ ALTER TABLE
lệnh nào , chẳng hạn như a DROP TABLE
và CREATE TABLE
, có thể phá vỡ tính toàn vẹn của giao dịch, mysqldump đã cố gắng thực hiện kết xuất. Cắt ngắn một bảng (là DDL trong Vũ trụ MySQL) và bỏ và thêm chỉ mục có thể cũng như gây rối.
Bạn có thể tìm thêm thông tin về điều đó từ MySQL Performance Bí mật giữ bí mật tốt nhất của MySQL Performance Blog . Tôi thực sự đã giải quyết điểm này trong một câu hỏi trước đây mô tả 12 lệnh có thể phá vỡ tính toàn vẹn của giao dịch của mysqldump: Sao lưu MySQL InnoDB
CAUPAT
TIẾNG VIỆT
Một hoặc cả hai khía cạnh có thể đã góp phần khiến cho một hàng bị trượt trong quá trình mysqldump không tồn tại do các quy tắc viết lại hoặc sự cô lập của mysqldump bị ghi đè.
BỀN VỮNG
Tôi sẽ thực hiện kết xuất mysqlbinlog của tất cả các bản ghi chuyển tiếp kể từ khi bắt đầu mysqldump để xem tất cả các CHỨNG CHỈ rằng Slave sẽ xử lý và xem các hàng đó đã tồn tại trên Slave chưa. Nếu họ làm, bạn có thể làm hai điều:
1: Bỏ qua tất cả các lỗi Khóa trùng lặp
Đơn giản chỉ cần thêm phần này vào my.cnf trên Slave
[mysqld]
slave-skip-errors=1062
skip-slave-start
và khởi động lại mysql. Sau đó chạySTART SLAVE;
tất cả các lỗi khóa trùng lặp sẽ được bỏ qua. Khi Seconds_Behind_Master
về 0, xóa các dòng đó và khởi động lại mysql.
2: Tải về các công cụ percona
Các công cụ bạn cần là
Sử dụng chúng để tìm sự khác biệt trong Slave, và sau đó sửa chúng