Có cách nào để ngăn chặn bản sao MySQL trên bản gốc không?


7

Tôi muốn chủ nhân ngừng sao chép dữ liệu vào nô lệ. Tôi biết tôi có thể làm điều đó với nô lệ STOP SLAVE;, nhưng tôi tự hỏi liệu có cách nào để làm điều đó trong chủ.

Một giải pháp khả thi có thể là thay đổi server_idthành 0, nhưng trong trường hợp này tôi sẽ phải khởi động lại mysql trong bản gốc để các thay đổi có hiệu lực.

Những gì tôi đang tìm kiếm là một tuyên bố như thế STOP MASTER;.


Hừm, liệu có thể từ chối các kết nối với IP mà nô lệ được định vị không?
ypercubeᵀᴹ

bạn có nghĩa là bằng cách thay đổi pw của người dùng hoặc như vậy?
HalaKuwatly

Tại sao bạn muốn chủ nhân ngừng sao chép dữ liệu vào nô lệ? Có phải vì bạn không muốn sử dụng bản sao nữa hay bạn đang cố gắng giải quyết một vấn đề khác? Câu trả lời tốt nhất và câu trả lời an toàn cho câu hỏi của bạn không thể được đưa ra mà không có thông tin đó.
Michael - sqlbot

nô lệ không còn có thể truy cập và tôi muốn dừng sao chép từ chủ để khi có thể truy cập lại nô lệ, việc sao chép không được tiếp tục.
HalaKuwatly

Câu trả lời:


9

Không tồn tại STOP MASTER;lệnh cũng như không có cơ chế thủ công từ Master để dừng sao chép. Bạn sẽ phải đi đến từng Slave và chạy tiếp theo:

  • STOP SLAVE; (Giết chủ đề IO và chủ đề SQL)
  • STOP SLAVE IO_THREAD; (Chỉ giết chủ đề IO)

Chạy một trong hai thứ này sẽ giúp bạn có được những điều sau:

  • Ghi lại các tọa độ sao chép trong master.info
    • Master_Log_File
    • Đọc_Master_Log_Pos
    • Relay_Master_Log_file
    • Exec_Master_Log_Pos

Chủ đề IO là những gì giao tiếp với Master. Giết IO Thread trên Master Side bằng KILLlệnh sẽ hủy bỏ IO Thread trên mỗi Slave. Điều đó có thể làm hỏng Bản ghi sạch các tọa độ sao chép.


2

Cách dễ nhất để thực hiện việc này trực tuyến là thu hồi tất cả các REPLICATION SLAVEđặc quyền trên bản gốc cho bất kỳ người dùng nào có nó.

Điều này mang lại lợi ích bổ sung cho phép bạn chọn lọc về những nô lệ bạn loại bỏ.

Khi đã xong, hãy kiểm tra bất kỳ phiên sao chép hiện có nào SHOW PROCESSLISTvà tắt chúng bằng KILLlệnh (chúng có thể tự tắt sau khi bạn thu hồi các đặc quyền, nhưng tôi nghi ngờ đây không phải là trường hợp).

Bạn cần lưu ý rằng, bằng cách sử dụng phương pháp này, việc sao chép sẽ không hoàn toàn dừng lại ở nô lệ, điều sẽ xảy ra là SLAVE IO_THREADsẽ không thể nhận được các câu lệnh (truy vấn) mới từ chủ, nhưng nếu cuối cùng bạn có truy vấn bạn đã nhận được từ chủ (những điều này đã được lưu trong nhật ký chuyển tiếp của bạn) nhưng chưa thực thi (bạn có thể kiểm tra xem bạn có chậm giây sau để xem có đúng không), điều đó sẽ không ngăn những truy vấn này không xảy ra hành hình.


Nếu bạn thu hồi các đặc quyền, hãy đảm bảo rằng bạn cũng chạy một FLUSH PRIVILEGESthông báo cho MySQL để tải lại bảng đặc quyền trong bộ nhớ.
altmannmarcelo

1
Bạn hiếm khi cần phải FLUSH PRIVILEGEStrừ khi bạn trực tiếp sửa đổi các quyền trong các bảng MySQL - nếu bạn bỏ quyền bằng REVOKE hoặc DROP USER thì máy chủ sẽ tự động tải lại các bảng cấp.
Nathan Jolly

Tôi sẽ thử lại sau hôm nay
HalaKuwatly

tôi đã thử nó và thực sự nhân rộng tiếp tục trên nô lệ, tôi đã phải phát hành stop slave;start slave; cho nó hoạt động!
HalaKuwatly

trên MySQL Flush Doc Trang bạn có thể thấy rằng REVOKE, DROP USER, DROP SERVER, và UNINSTALL PLUGINkhông tuôn bảng đặc quyền từ bộ nhớ. Sau khi thực hiện bất kỳ lệnh nào, bạn vẫn cần chạy FLUSH PRIVILEGES.
altmannmarcelo
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.