Miễn là bạn không thực hiện bất kỳ câu lệnh INSERT / UPDATE / DELETE trực tiếp nào trên Slave, Slave của bạn sẽ hoạt động tốt. Mặt khác, Bản sao MySQL có thể bị hỏng nếu bạn CHỌN một hàng mới trong mydb.mytable trên Slave và, thông qua Sao chép, Slave sau đó phát hiện một CHỨNG của một hàng tới mydb.mytable với cùng một KHÓA CHÍNH. Điều này tạo ra lỗi 1062 (Khóa trùng lặp).
Cách duy nhất bạn có thể viết cho Slave mà không phá vỡ Bản sao MySQL là:
- Master có cơ sở dữ liệu db1, db2, db3
- Slave đang sao chép cơ sở dữ liệu db1, db2, db3 từ Master
- Bạn chạy
CREATE DATABASE db4;
trên nô lệ
- Bạn chỉ XÁC NHẬN / CẬP NHẬT / XÓA với db4 trên Slave
- Bạn không thực hiện CHỈ / CẬP NHẬT / XÓA chỉ với db1, db2, db3 trên Slave
Để phát hiện Master và Slave không đồng bộ mà không tải xuống bất kỳ công cụ nào, hãy chọn bất kỳ bảng nào và chạy CHECKSUM TABLE dựa vào bảng trên bản sao của Master và Slave của cùng một bảng.
THÍ DỤ
Nếu bạn có một bảng mydb.mytable
, hãy chạy lệnh chống lại nó:
mysql> CHECKSUM TABLE mydb.mytable;
Nếu các giá trị không trở lại như cũ, thì có gì đó không đồng bộ.
Nếu bạn muốn kiểm tra hàng loạt bảng, bạn có thể xuống MAATKIT của Percona. Bạn sẽ cần hai công cụ cụ thể (Percona cũng có Bộ công cụ Percona mà chính họ đã rẽ nhánh từ MAATKIT hiện đang được quảng bá nhiều hơn)
hoặc là
pt-table-checksum
sẽ thực hiện BẢNG KIỂM TRA đối với tất cả các bảng trên Master và Slave. Bạn có thể cấu hình nó để làm tất cả các cơ sở dữ liệu trên chỉ những cơ sở cụ thể.
pt-table-sync
có thể chạy trên Slave đối với bất kỳ bảng nào. Sử dụng các tùy chọn --print và --sync-to-master, bạn có thể thấy những câu lệnh SQL nào cần được thực thi trên Slave để nó hoàn toàn khớp với Master. Công cụ này không hoạt động với bảng thiếu KHÓA CHÍNH hoặc KHÓA ĐỘC ĐÁO.
Tôi đã sử dụng MAATKIT trong nhiều năm. Tôi vẫn làm. Tôi chưa thử Bộ công cụ Percona, nhưng tôi chắc chắn nó phải có chất lượng tương đương với MAATKIT.