ควรตั้งค่าการจำลองแบบทาสของ MySQL ให้อ่านได้อย่างเดียวหรือไม่?


22

ฉันได้รับการจำลองแบบที่ทำงานบน Percona Server 5.5 โดยทำตามคำแนะนำนี้และสงสัยว่าฉันควรจะเพิ่มread-only=1ทาสของฉันmy.cnfเพื่อให้อ่านได้อย่างเดียวหรือไม่?

คู่มือการตั้งค่าการจำลองแบบสำหรับตาราง mysql เพื่อให้ผู้ใช้มีการจำลองแบบ แต่ฉันส่วนใหญ่ใช้ทาสที่จะใช้ mysqldumps, ในกรณีฉุกเฉินการกำหนดค่าใหม่ให้เป็นหลักดังนั้นฉันไม่เชื่อว่าเราต้องการ (หรือควรมี) เขียนเปิดใช้งาน มันตลอดเวลา?


+1 สำหรับการแจ้งเตือนที่มักถูกมองข้ามเพื่อทำให้ทาสอ่านได้อย่างเดียว
RolandoMySQLDBA

คำตอบ:


31

เมื่อเป็นทาส อ่านอย่างเดียวจะไม่ได้รับการป้องกัน 100% จากโลก

ตามเอกสาร MySQL ใน read-only

ตัวแปรนี้ถูกปิดโดยปริยาย เมื่อเปิดใช้งานเซิร์ฟเวอร์จะไม่อนุญาตให้มีการอัปเดตยกเว้นจากผู้ใช้ที่มีสิทธิ์พิเศษหรือ (บนเซิร์ฟเวอร์ทาส) จากการอัปเดตที่ดำเนินการโดยชุดเธรดรอง ในการตั้งค่าการจำลองแบบจะมีประโยชน์ในการเปิดใช้งาน read_only บนเซิร์ฟเวอร์ทาสเพื่อให้แน่ใจว่าทาสยอมรับการปรับปรุงจากเซิร์ฟเวอร์หลักเท่านั้นไม่ใช่จากไคลเอนต์

ดังนั้นทุกคนที่มีสิทธิ์พิเศษสามารถอ่านและเขียนตามใจชอบใน Slave ...

ตรวจสอบให้แน่ใจว่าผู้ใช้ที่ไม่มีสิทธิพิเศษทั้งหมดไม่มีสิทธิ์พิเศษ

หากคุณต้องการยกเลิกสิทธิ์ใช้งาน SUPER ทั้งหมดในหนึ่งนัดโปรดเรียกใช้งานบน Master และ Slave:

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

จากการอ้างอิงถึง Slave สิ่งนี้จะสงวนสิทธิ์พิเศษไว้เป็นอย่างยิ่ง rootและป้องกันไม่ให้มีการยกเว้นจากการเขียนที่พวกเขาจะถูก จำกัด

อัพเดท 2015-08-28 17:39 EDT

ฉันเพิ่งรู้เมื่อเร็ว ๆ นี้ว่า MySQL 5.7 จะแนะนำsuper_read_only

สิ่งนี้จะหยุดผู้ใช้SUPERในเพลงของพวกเขาเพราะ 5.7 Docs พูด

หากเปิดใช้งานตัวแปรระบบ read_only เซิร์ฟเวอร์อนุญาตให้อัพเดตไคลเอ็นต์จากผู้ใช้ที่มีสิทธิ์พิเศษเท่านั้น หากตัวแปรระบบ super_read_only ถูกเปิดใช้งานด้วยเช่นกันเซิร์ฟเวอร์จะห้ามไม่ให้มีการอัพเดทไคลเอนต์จากผู้ใช้ที่มี SUPER ดูคำอธิบายของตัวแปรระบบ read_only สำหรับคำอธิบายของโหมดอ่านอย่างเดียวและข้อมูลเกี่ยวกับวิธีที่ read_only และ super_read_only โต้ตอบ

การเปลี่ยนแปลงเป็น super_read_only บนเซิร์ฟเวอร์หลักจะไม่ถูกจำลองแบบไปยังเซิร์ฟเวอร์ทาส ค่าสามารถตั้งค่าบนเซิร์ฟเวอร์ทาสโดยไม่ขึ้นกับการตั้งค่าบนต้นแบบ

super_read_only ถูกเพิ่มใน MySQL 5.7.8


1
ดังนั้นวิธีที่ดีที่สุดในการทำให้ทาสอ่านอย่างเดียวคืออะไร?
xref

6
ใช่เป็นวิธีปฏิบัติที่ดีที่สุดในการทำเช่นนี้
RolandoMySQLDBA

1
ฉันจะใช้ฐานข้อมูลการรายงานบนสลาฟกับข้อมูลที่รวบรวมจากฐานข้อมูลการดำเนินงานด้วยตัวเลือกแบบอ่านอย่างเดียวได้อย่างไร
Geany

3

ควรตั้งค่าการจำลองแบบทาสของ MySQL ให้อ่านได้อย่างเดียวหรือไม่?

ใช่คุณควรเรียกใช้เซิร์ฟเวอร์ทาสด้วยโหมด R / O ที่มีอยู่ ผู้ใช้ที่ได้รับสิทธิพิเศษก่อนหน้านี้สามารถแก้ไขข้อมูลของทาสได้ แต่หลังจากนั้นพวกเขาก็จะได้รับ "ลูกบิด" สำหรับการ จำกัด R / O

เหตุใดจึงสำคัญ - ล้มเหลวในการเขียนดีกว่าเสียใจกับการเขียนที่ไม่เหมาะสมซึ่งอาจทำให้ทาสไม่สามารถใช้งานได้อย่างมีประสิทธิภาพเนื่องจากข้อมูลที่เรียบง่ายขึ้นหรือสิ่งต่าง ๆ เช่นความขัดแย้งของกุญแจ

นอกจากนี้ยังมีซอฟต์แวร์ที่ใช้สำหรับ orchestration / load split ที่จะพิจารณาสถานะ R / O ของเซิร์ฟเวอร์ในกลุ่มที่กำหนดค่าสำหรับการร้องขอเส้นทางที่เหมาะสมระหว่างเซิร์ฟเวอร์เหล่านั้น

นี่คือความปลอดภัย ใช้มัน.


1

ปัญหาที่นี่รวมถึง MySQL 8.0 นั่นคือ MySQL ไม่ได้บังคับให้คุณตั้งค่าread_only = ONเมื่อคุณรันstart slaveคำสั่ง ทำไมถึงมีปัญหา? เพราะ MySQL DBA เกือบทั้งหมดใช้ทาสของพวกเขาใน RO เพื่อป้องกันความเสียหายของข้อมูลและมีหนึ่ง dba อยู่เสมอที่เรียกใช้ SQL ผิดพลาดที่แก้ไขข้อมูลบนทาสหรือแอพที่ไม่เปลี่ยนความเชื่อมั่นของเขา ถ้าผมต้องการเขียนบนทาสเพราะมันมีหลายสกีมาและผมจำเป็นต้องทำเขียนบนคีมานี้เพื่อให้คำสั่งจะต้องฉลาดมากขึ้นและให้เราทำread_only read_only for schemaนั่นอาจจะเป็นประโยชน์อย่างมากในเซิร์ฟเวอร์ของ Multi-Master Replicate_Ignore_DBและทาสที่ทำ ดังนั้นในตอนนี้คุณต้องทำการควบคุมด้วยตนเองและต้องระมัดระวังอย่างมาก

สนุก.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.