Haruskah budak replikasi MySQL diatur untuk hanya membaca?

22

Saya menjalankan replikasi di Percona Server 5.5 dengan mengikuti panduan ini dan bertanya-tanya apakah saya harus menambahkan read-only=1slave saya my.cnfagar hanya dibaca?

Panduan ini mengatur replikasi untuk tabel mysql sehingga pengguna direplikasi tetapi saya terutama menggunakan slave untuk mengambil mysqldumps, sebuah dalam keadaan darurat mengkonfigurasi ulang untuk menjadi master, jadi saya tidak percaya kita perlu (atau seharusnya) menulis diaktifkan di terus-menerus?

xref
sumber
+1 untuk pengingat yang sering diabaikan agar budak hanya baca.
RolandoMySQLDBA

Jawaban:

31

Ketika seorang Slave hanya-baca , ia tidak 100% terlindung dari dunia.

Menurut Dokumentasi MySQL pada read-only

Variabel ini tidak aktif secara default. Saat diaktifkan, server tidak mengizinkan pembaruan kecuali dari pengguna yang memiliki hak SUPER atau (pada server slave) dari pembaruan yang dilakukan oleh utas slave. Dalam pengaturan replikasi, akan sangat berguna untuk mengaktifkan read_only pada server slave untuk memastikan bahwa slave hanya menerima pembaruan dari server master dan bukan dari klien.

Dengan demikian, siapa pun dengan hak istimewa SUPER dapat membaca dan menulis sesuka hati kepada ...

Pastikan semua pengguna yang tidak memiliki hak istimewa tidak memiliki Hak Istimewa SUPER.

Jika Anda ingin mencabut semua hak istimewa SUPER dalam satu kesempatan, jalankan ini pada Master dan Slave:

UPDATE mysql.user SET super_priv='N' WHERE user<>'root';
FLUSH PRIVILEGES;

Dengan merujuk pada Slave, ini akan memberikan hak istimewa SUPER untuk adil rootdan mencegah yang tidak memiliki hak istimewa melakukan penulisan yang seharusnya tidak dibatasi.

UPDATE 2015-08-28 17:39 EDT

Saya baru saja belajar bahwa MySQL 5.7 akan memperkenalkan super_read_only .

Ini akan menghentikan pengguna SUPER di jalur mereka karena 5.7 Documents katakan

Jika variabel sistem read_only diaktifkan, server mengizinkan pembaruan klien hanya dari pengguna yang memiliki hak istimewa SUPER. Jika variabel sistem super_read_only juga diaktifkan, server melarang pembaruan klien bahkan dari pengguna yang memiliki SUPER. Lihat deskripsi variabel sistem read_only untuk deskripsi mode baca-saja dan informasi tentang bagaimana read_only dan super_read_only berinteraksi.

Perubahan ke super_read_only pada server master tidak direplikasi ke server slave. Nilai dapat diatur pada server slave terlepas dari pengaturan pada master.

super_read_only ditambahkan di MySQL 5.7.8.

RolandoMySQLDBA
sumber
1
jadi itu praktik terbaik untuk membuat budak hanya-baca?
xref
6
Ya itu adalah praktik terbaik untuk melakukannya
RolandoMySQLDBA
1
Bagaimana saya bisa menggunakan database pelaporan pada slave dengan data yang dikumpulkan dari database operasional dengan opsi hanya baca?
Geany
3

Haruskah budak replikasi MySQL diatur untuk hanya membaca?

Ya, Anda sebaiknya menjalankan server slave dengan mode R / O yang tersedia. Sebelumnya pengguna istimewa dapat memodifikasi data budak seperti itu tetapi kemudian mereka juga mendapat "kenop" pembatasan R / O.

Mengapa ini penting - lebih baik gagal dengan menulis daripada menyesal dengan penulisan yang tidak tepat yang dapat secara efektif membuat budak tidak dapat digunakan karena data sederhana tercampur atau hal-hal seperti konflik kunci yang akan merusak replikasi (tidak ada lagi budak yang sebenarnya lagi).

Ada juga perangkat lunak yang digunakan untuk orkestrasi / load split yang akan mempertimbangkan status R / O server di kumpulan yang telah mereka konfigurasikan untuk perutean permintaan yang tepat di antara server-server itu.

Ini aman. Gunakan.

poige
sumber
1

Masalahnya di sini, termasuk MySQL 8.0, adalah bahwa MySQL tidak memaksa Anda untuk mengatur read_only = ONketika Anda menjalankan start slaveperintah. Mengapa ada masalah? Karena hampir semua MySQL DBA menggunakan slave mereka pada RO, untuk mencegah korupsi data, dan selalu ada satu dba yang secara tidak sengaja menjalankan SQL yang memodifikasi data pada slave, atau aplikasi yang tidak akan mengubah conf-nya. Jika saya ingin menulis pada budak, karena ada beberapa skema dan saya perlu menulis tentang skema ini, jadi read_onlyperintahnya harus lebih cerdas, dan mari kita lakukan a read_only for schema. Itu bisa sangat berguna pada server multi-master dan budak yang melakukan Replicate_Ignore_DB. Jadi, untuk saat ini, Anda harus melakukan kontrol secara manual dan sangat berhati-hati.

Nikmati.

Cepxio
sumber