การลบบันทึก bin ในสภาพแวดล้อมการจำลองแบบ


13

ฉันมีคำถามเกี่ยวกับการลบบันทึกแบบไบนารีในสภาพแวดล้อมการจำลองแบบ:

เรามีสภาพแวดล้อมที่มี 1 master และ 2 slaves (กำลังเรียกใช้ mysql 5.5) บางครั้งเราพบปัญหาเกี่ยวกับพื้นที่ระหว่างการประมวลผลครั้งใหญ่โดยที่ bin log directory เต็ม บันทึกหมดอายุทุก 3 วัน ฉันสงสัยว่ามีเหตุผลหรือไม่ที่จะต้องเก็บบันทึกไว้เป็นเวลา 3 วันในกล่องทั้งหมด - ผู้เชี่ยวชาญและทาสทั้งสอง? ยกตัวอย่างเช่นการเก็บบันทึกเป็นเวลา 3 วันสำหรับต้นแบบ แต่สำหรับทาส 1 วัน วิธีที่ดีที่สุดที่จะไปเกี่ยวกับมันคืออะไร?

ขอขอบคุณ!


ยินดีต้อนรับสู่ DBA.SE คำถามนี้สมควรได้รับ +1 เนื่องจากการบันทึกแบบไบนารีและการเติบโตบันทึกการถ่ายทอดมักได้รับการพิจารณาและอาจเป็นสาเหตุของปัญหามากมายหากไม่ได้ตรวจสอบ
RolandoMySQLDBA

คำตอบ:


12

ทาส

หากทาสของคุณไม่ใช่ผู้เชี่ยวชาญแล้วทาสไม่จำเป็นต้องมีการบันทึกแบบไบนารีเลย คุณสามารถวางฝาปิดตามจำนวนพื้นที่บันทึกการถ่ายทอดที่สะสมโดย 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

  1. Master ต้องเปิดใช้งานบันทึกไบนารี
  2. Slave รวบรวมบันทึกการถ่ายทอด
  3. เมื่อ SQL ทั้งหมดในบันทึกการถ่ายทอดถูกประมวลผลมันจะถูกลบ
  4. บน Slave เมื่อมีมากกว่าหนึ่งบันทึกการส่งผ่านบนเซิร์ฟเวอร์ฐานข้อมูลมันอาจบ่งชี้ว่าการจำลองแบบจะตกหลุมเนื่องจากเธรด IO กำลังรวบรวม SQL จากต้นแบบที่เร็วกว่าที่เธรด SQL สามารถประมวลผลบันทึกการถ่ายทอด
  5. การใช้relay_log_space_limitป้องกันการเรพลิเคทจากการซ้อนและอาจเติมดิสก์ ล็อกรีเลย์หมุนออกตามกฎ # 3
  6. เป็นไปได้ที่ 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“ การระบุตัวเลือกโปรแกรม”


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