Trong bản sao MySQL Master / Slave, điều gì sẽ xảy ra nếu tôi viết cho Slave?


17

Một số câu hỏi

  • Mục Slave có còn tồn tại cho đến khi có chèn / cập nhật / xóa vào bảng trên Master có thể ảnh hưởng đến Slave không?

  • Nếu không, làm cách nào để đảm bảo rằng Slave không đồng bộ với Master tiến lên (bằng cách xóa mục Slave hoặc sao chép mục đó vào Master theo cách thủ công)?

  • Quan trọng nhất, làm thế nào để tôi phát hiện ra rằng các bảng không đồng bộ?


vui lòng giải thích chính xác câu hỏi của bạn ...
Abdul Manaf

1
Không phải mối quan hệ chủ / nô lệ là đồng bộ một chiều từ chủ sang nô lệ, nhưng không phải ngược lại? Tôi đang hỏi điều gì sẽ xảy ra nếu bạn viết thư cho nô lệ trong kiểu thiết lập này.
kfmfe04

Câu trả lời:


14

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-checksumsẽ 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-synccó 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.


ty cho câu trả lời chi tiết. Tôi nghĩ rằng tôi có nhiều câu hỏi hơn, nhưng tôi nghĩ rằng câu trả lời của bạn đã bao gồm tất cả các trường hợp (pt-table-sync dường như thực sự hữu ích).
kfmfe04
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.