ทาส
หากทาสของคุณไม่ใช่ผู้เชี่ยวชาญแล้วทาสไม่จำเป็นต้องมีการบันทึกแบบไบนารีเลย คุณสามารถวางฝาปิดตามจำนวนพื้นที่บันทึกการถ่ายทอดที่สะสมโดย Slave เพื่อที่จะเค้นบันทึกการถ่ายทอดที่ 4G เพิ่มrelay_log_space_limit
/etc/my/.cnf ใน Slave ทุกตัว
[mysqld]
relay_log_space_limit=4G
และเริ่ม mysql ใหม่
หากคุณไม่สามารถตั้งค่านี้อย่างน้อยคุณควรมีการแจ้งเตือนบางอย่างที่ทำSHOW SLAVE STATUS\G
และตรวจสอบค่าของRelay_Log_Space
(จำนวนไบต์ทั้งหมดที่ใช้โดยบันทึกการถ่ายทอด)
MASTER
สำหรับอาจารย์คุณสามารถตั้งค่าexpire_logs_days
เป็น 1 แต่มีคำเตือนที่รุนแรงที่ฉันมีให้คุณ ...
หากการจำลองแบบแตกคุณมีเวลา 1 วันในการแก้ไข มิฉะนั้นการบันทึกแบบไบนารีบนมาสเตอร์อาจหมุนไปและคุณไม่สามารถรันคำสั่ง CHANGE MASTER TO ใด ๆ เพื่อปรับการจำลองแบบใหม่ ฉันจะไปexpire_logs_days
ตอน 3 โมงกับอาจารย์
คำแนะนำ # 1
หากคุณมีการประมวลผลจำนวนมากค้างคืนที่จะต้องทำอาจจะเรียกใช้กระบวนการจำนวนมากบนในปริญญาโทด้วยSET SQL_LOG_BIN=0;
ที่จุดเริ่มต้นของเซสชั่น แน่นอนนี้จะไม่ทำซ้ำกับ Slave คุณสามารถทำการโหลดแบบกลุ่มจำนวนมากในแบบคู่ขนานกับทั้งทาส
คำแนะนำ # 2
อีกสิ่งหนึ่งที่คุณสามารถทำได้เพื่อจัดการการสะสมบันทึกของไบนารีหลักก็คือ
วิ่งSHOW SLAVE STATUS\G
บนทาสทั้งสอง Relay_Master_Log_File
ดูที่ นั่นหมายถึงบันทึกเลขฐานสองบนมาสเตอร์ซึ่งคำสั่งสุดท้ายถูกดำเนินการบน Slave
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.4.92.250
Master_User: replicant
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.009677
Read_Master_Log_Pos: 855227755
Relay_Log_File: relay-bin.000674
Relay_Log_Pos: 757296783
Relay_Master_Log_File: mysql-bin.009590
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 757296646
Relay_Log_Space: 94274010765
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 80561
1 row in set (0.00 sec)
ในตัวอย่างนี้ Relay_Master_Log_File คือ mysql-bin.009590 บันทึกไบนารีทั้งหมดก่อนที่จะสามารถลบออกจาก Master ได้ คุณสามารถเรียกใช้สิ่งนี้กับปรมาจารย์:
PURGE BINARY LOGS TO 'mysql-bin.009590';
การทำเช่นนี้จะลบบันทึกเก่า ๆ และยังคงอยู่ในการจำลอง
ข้อแม้
Binary Logs เป็นไฟล์ที่รวบรวมลำดับ (เช่นคิว FIFO) ธุรกรรม SQL ที่เสร็จสมบูรณ์ทั้งหมดเป็นคำสั่ง SQL หรือการเปลี่ยนแถว รีเลย์ล็อกเป็นไฟล์ที่รวบรวมรายการบันทึกไบนารีจากเซิร์ฟเวอร์ระยะไกล (หรือที่รู้จักว่า Master)
ในการจำลองแบบ MySQL
- Master ต้องเปิดใช้งานบันทึกไบนารี
- Slave รวบรวมบันทึกการถ่ายทอด
- เมื่อ SQL ทั้งหมดในบันทึกการถ่ายทอดถูกประมวลผลมันจะถูกลบ
- บน Slave เมื่อมีมากกว่าหนึ่งบันทึกการส่งผ่านบนเซิร์ฟเวอร์ฐานข้อมูลมันอาจบ่งชี้ว่าการจำลองแบบจะตกหลุมเนื่องจากเธรด IO กำลังรวบรวม SQL จากต้นแบบที่เร็วกว่าที่เธรด SQL สามารถประมวลผลบันทึกการถ่ายทอด
- การใช้relay_log_space_limitป้องกันการเรพลิเคทจากการซ้อนและอาจเติมดิสก์ ล็อกรีเลย์หมุนออกตามกฎ # 3
- เป็นไปได้ที่ DB Server จะเป็นทั้ง Master และ Slave นั่นเป็นสถานการณ์เดียวที่ทาสต้องเปิดใช้งานบันทึกไบนารี ในสถานการณ์สมมตินั้นเซิร์ฟเวอร์ฐานข้อมูลจะมีทั้งบันทึกไบนารีและบันทึกการถ่ายทอด
หากคุณล้มเหลวในการเป็นทาสและคุณต้องการทำให้มันเป็นนาย
- บริการ mysql หยุด
- เพิ่ม
log-bin=mysql-bin
ไปยัง /etc/my.cnf บน Slave
- บริการ mysql เริ่มต้น
คุณจะต้องตั้งค่าการจำลองแบบของ Slaves อื่น ๆ ให้กับ Master ที่ได้รับการเลื่อนตำแหน่งใหม่และตรวจสอบให้แน่ใจว่าข้อมูลใน Slave นั้นตรงกับ Master ที่ได้รับการเลื่อนตำแหน่งใหม่
อัพเดท 2012-08-13 17:47 EDT
ตามเอกสาร MySQL บนrelay-log
ตัวเลือกคุณควรกำหนด นี่คือเหตุผล:
เนื่องจากลักษณะที่ MySQL แยกวิเคราะห์ตัวเลือกเซิร์ฟเวอร์หากคุณระบุตัวเลือกนี้คุณต้องระบุค่า ชื่อเริ่มต้นจะใช้เฉพาะในกรณีที่ไม่ได้ระบุตัวเลือกจริง หากคุณใช้ตัวเลือก --relay-log โดยไม่ระบุค่าพฤติกรรมที่ไม่คาดคิดน่าจะเกิดขึ้น พฤติกรรมนี้ขึ้นอยู่กับตัวเลือกอื่น ๆ ที่ใช้ลำดับที่ระบุและไม่ว่าจะระบุไว้ในบรรทัดคำสั่งหรือในไฟล์ตัวเลือก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ MySQL จัดการกับตัวเลือกเซิร์ฟเวอร์ให้ดูหัวข้อ 4.2.3“ การระบุตัวเลือกโปรแกรม”