Ngăn chặn không sao chép ghi vào nô lệ MySQL?


12

Chúng tôi có một số máy chủ cơ sở dữ liệu MySQL được thiết lập với sao chép dựa trên hàng, để thực hiện. Phần mềm ghi cho chủ và đọc từ chủ hoặc nô lệ. Mọi thứ đều hoạt động tốt, phần lớn.

Theo hiểu biết của tôi, MySQL sẽ cho phép ghi vào nô lệ, mặc dù họ biết đó là nô lệ của MySQL. Lý tưởng nhất là tôi muốn đóng cái này lại, vì vậy ngay cả khi ai đó viết một số mã xấu có kết nối đọc và thực hiện UPDATE, nó sẽ đưa ra một lỗi thay vì đưa dữ liệu vào nô lệ.

Có cách nào để làm điều này trong MySQL không? Rõ ràng là chúng tôi cũng muốn biến điều này thành không thể từ phần mềm của mình, nhưng giống như tường lửa trên máy chủ của chúng tôi, tôi muốn phòng thủ hết mức có thể.

Cảm ơn!

Câu trả lời:


13

Kích hoạt read-onlytùy chọn trong my.cnf. Nó cũng có thể được chỉ định làm cờ trên dòng lệnh bằng --read-onlymysqld.


5
Lưu ý rằng điều này sẽ không hoạt động đối với các siêu nhân (tức là: người dùng root trong MySQL) vì nó không tuân theo chỉ đọc.
vmfarms

5

Thay thế cho cài đặt read_only=1(ví dụ: khi có cơ sở dữ liệu Scratchpad / báo cáo / phát triển khác trên phiên bản nô lệ), đôi khi tôi loại bỏ tất cả các đặc quyền khác ngoài CHỌN từ tất cả người dùng sang DB mà tôi đang sao chép.

Đó là, sau khi chạy lệnh GRANT trên bản gốc, tôi chạy lệnh REVOKE trên nô lệ.


2

Kể từ phiên bản MySQL 5.7.8 , giờ đây đã có một super_read_onlytùy chọn, ngăn chặn ngay cả người dùng SUPER thực hiện cập nhật máy khách. Nó không phá vỡ quá trình sao chép. Cũng như các cài đặt khác, nó có thể được đặt:

  • ở định dạng dòng lệnh ( --super_read_only=ON),
  • như một biến trong my.cnf ( super_read_only=1) hoặc
  • từ dấu nhắc của máy khách ( SET GLOBAL super_read_only = 1;).

Lưu ý rằng:

  • Kích hoạt super_read_onlyngầm cho phépread_only
  • Vô hiệu hóa read_onlyhoàn toàn vô hiệu hóasuper_read_only

Một số hãy cẩn thận:

  • Không read_onlyphải cũng super_read_onlysẽ không ngăn chặn các hoạt động trên các bảng tạm thời.
  • Họ sẽ không ngăn chặn các hoạt động siêu dữ liệu như BẢNG ANALYZE và BẢNG TỐI ƯU.
  • Lỗi cho một số truy vấn nhất định với super_read_onlykích hoạt đã được báo cáo.

Tham khảo: https://www.percona.com/blog/2016/09/27/USE-the-super_read_only-system-variable/


1

Như bài viết đầu tiên phần nào cho thấy, bạn làm điều đó với quyền. Tùy chọn chỉ đọc không hoạt động đối với siêu người dùng như một FYI và nó cũng không thực sự là một giải pháp khả thi cho một nô lệ nơi bạn muốn ngăn chặn việc ghi. Bạn cần ngăn việc ghi với quyền của người dùng / cơ sở dữ liệu / bảng. Đối với một, người dùng sao chép vẫn phải có thể ghi vào nô lệ để giữ cho nó đồng bộ với chủ. Cách tốt hơn để kiểm soát việc ghi là bạn cần thu hồi các tùy chọn cho phép ghi (nghĩa là chèn, tạo, v.v.) cho người dùng đang nghi vấn chỉ nên đọc trên nô lệ.


0

Chỉ cung cấp quyền nhân rộng liên quan đến người dùng trên nô lệ. Bạn vẫn có vấn đề về quyền người dùng root, nhưng bạn có thể xóa quyền truy cập root từ xa vào máy chủ DB.

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.