Kami memiliki beberapa server database MySQL yang diatur dengan replikasi berbasis baris, untuk kinerja. Perangkat lunak menulis ke master, dan membaca dari master atau slave. Semuanya bekerja dengan baik, sebagian besar.
Ini pemahaman saya bahwa MySQL akan mengizinkan penulisan ke slave, meskipun ia tahu itu adalah slave MySQL. Idealnya, saya ingin menutup ini, jadi bahkan jika seseorang menulis beberapa kode buruk yang mendapat koneksi-baca dan melakukan UPDATE
, itu akan menimbulkan kesalahan daripada menaruh data pada slave.
Apakah ada cara untuk melakukan ini di MySQL? Jelas kami ingin membuat ini tidak mungkin dari perangkat lunak kami, juga, tetapi seperti firewall di server kami, saya ingin menjadi defensif mungkin.
Terima kasih!
Sebagai alternatif untuk pengaturan
read_only=1
(misalnya ketika ada basis data scratchpad / pelaporan / pengembangan lain pada contoh slave), saya terkadang menghapus semua hak istimewa selain SELECT dari semua pengguna ke DB yang saya replikasi.Yaitu, setelah menjalankan perintah GRANT pada master, saya menjalankan perintah REVOKE pada slave.
sumber
Pada MySQL 5.7.8 , sekarang ada
super_read_only
opsi, yang mencegah bahkan pengguna SUPER melakukan pembaruan klien. Itu tidak mengganggu proses replikasi. Seperti pengaturan lainnya, dapat diatur:--super_read_only=ON
),super_read_only=1
), atauSET GLOBAL super_read_only = 1;
).Perhatikan bahwa:
super_read_only
secara implisit memungkinkanread_only
read_only
secara implisit menonaktifkansuper_read_only
Beberapa peringatan:
read_only
tidaksuper_read_only
akan mencegah operasi pada tabel sementara.super_read_only
diaktifkan telah dilaporkan.Referensi: https://www.percona.com/blog/2016/09/27/using-the-super_read_only-system-variable/
sumber
Seperti yang disarankan oleh posting pertama, Anda melakukannya dengan izin. Opsi baca-saja tidak berfungsi untuk pengguna super sebagai FYI dan juga bukan solusi yang bisa diterapkan untuk budak di mana Anda ingin mencegah penulisan. Anda perlu mencegah penulisan dengan izin pengguna / database / tabel. Untuk satu, pengguna replikasi masih harus bisa menulis ke budak untuk tetap sinkron dengan master. Cara yang lebih baik untuk mengontrol penulisan adalah Anda perlu mencabut opsi yang memungkinkan penulisan (yaitu menyisipkan, membuat, dll.) Untuk pengguna yang bersangkutan yang seharusnya hanya melakukan membaca pada slave.
sumber
Hanya memberikan hak terkait replikasi kepada pengguna di slave. Anda masih memiliki masalah hak pengguna root, tetapi Anda dapat menghapus akses root jarak jauh ke server DB.
sumber