Score:0

เหตุใด binlogs จึงเปิดเป็นค่าเริ่มต้นใน MySQL 8 และจะถูกลบโดยอัตโนมัติหรือไม่

ธง in

เราเพิ่งค้นพบว่าในการกำหนดค่าเริ่มต้นของ MySQL 8 บินล็อก.* ไฟล์ระเกะระกะใน /var/lib/mysql บนเครื่อง Ubuntu 20.04

เช่น เรามีฐานข้อมูลขนาด 4.2 GB และบินล็อกประมาณ 500 MB ต่อวัน

ด้วยเหตุนี้เราจึงมีพื้นที่ดิสก์เหลือน้อย

แน่นอนว่าเราสามารถปิดการใช้งานและลบ binlogs ได้ แต่เรากำลังสงสัยว่าอะไรคือสาเหตุของการกำหนดค่าเริ่มต้นนี้ และพวกมันทั้งหมดจะถูกลบหรือไม่ (และเราแค่ต้องเพิ่มพื้นที่เก็บข้อมูลในเครื่องของเราอีกเล็กน้อย)

เราเดาว่าไม่ควรเก็บไว้ตลอดไปในการกำหนดค่าเริ่มต้นเพราะจำเป็นต้องใช้พื้นที่เก็บข้อมูลที่ไม่จำกัด

ua flag
อยู่ใน dba.stackexchange.com
Score:1
ธง cn

บทนำ

นี่คือการเปลี่ยนแปลงต้นน้ำ การกระจายบางอย่างอาจเปลี่ยนการตั้งค่ากลับ แต่มีแนวโน้มว่าส่วนใหญ่จะทำตามต้นน้ำ

codebase ถูกโฮสต์บน https://github.com/mysql/mysql-server ไฟล์จริงที่การบันทึกไบนารีถูกตั้งค่าเป็นค่าเริ่มต้นคือ sql/sys_vars.cc

เมื่อพิจารณาจากคำตำหนิ ในที่สุดฉันก็สรุปการกระทำที่เปลี่ยนค่าดีฟอลต์: https://github.com/mysql/mysql-server/commit/9fa9504e5aaf68661aef2d735cecbd3c58eb7790

มันกล่าวถึงรายการบันทึกการทำงานสำหรับทีม mysql: #10470 คุณสามารถค้นหาได้ที่นี่: https://dev.mysql.com/worklog/

เดอะ ส่วนเหตุผล ของรายการ Worklog นั้นเสนอสิ่งนี้:

เหตุผล

การติดตั้งที่ใช้งานจริงเกือบทั้งหมดเปิดใช้งานบันทึกไบนารีเมื่อใช้งาน สำหรับการจำลองแบบและการกู้คืน ณ เวลาใดเวลาหนึ่ง

ด้วยเหตุนี้เราควรเปิดใช้งานตามค่าเริ่มต้นด้วยเหตุผลดังต่อไปนี้:

  1. เราลดขั้นตอนการกำหนดค่าหนึ่งขั้นตอนสำหรับผู้ใช้ 1A. การเปิดใช้งานในภายหลังจำเป็นต้องรีสตาร์ท mysqld
  2. เราได้รับการทดสอบภายในที่เหมือนการผลิตมากขึ้นของเซิร์ฟเวอร์
  3. เราสามารถทราบและเผชิญกับผลกระทบด้านประสิทธิภาพของบันทึกไบนารีได้ดีขึ้น

หมดอายุ

ใน mysql 8.0 การหมดอายุเริ่มต้นสำหรับล็อกไฟล์คือ 30 วันซึ่งควบคุมโดยตัวแปร binlog_expire_logs_secondsซึ่งมีค่าเริ่มต้นเป็น 2592000 วินาที. เพื่อให้การล้างข้อมูลเกิดขึ้นจริง จะต้องมีการล้างบันทึก ตามเอกสารประกอบ การล้างข้อมูลบันทึกจะเกิดขึ้นโดยอัตโนมัติเมื่อไฟล์บันทึกไบนารีไฟล์หนึ่งปิดและไฟล์ใหม่เริ่มทำงาน สามารถกำหนดขนาดสูงสุดของแต่ละไฟล์ได้ max_binlog_size ซึ่งสูงสุด 1GB อย่างไรก็ตาม มีข้อแม้อยู่อย่างหนึ่งว่าธุรกรรมจะไม่ถูกแยกระหว่างไฟล์บันทึก และตามทฤษฎีแล้วอาจมีขนาดสูงสุด 4GB คุณยังสามารถออก ล้างบันทึก หรือ ก ล้างบันทึกไบนารี งบรายวันด้วยตัวคุณเอง

in flag
ดังนั้นฉันเดาว่ากลยุทธ์ที่ดีที่สุดคือการ "ล้างบันทึก" หลังจากการสำรองข้อมูลที่ใช้ mysqldump สำเร็จซึ่งเราทำเป็นประจำอยู่แล้วหรือ binlogs สามารถแทนที่การสำรองข้อมูลที่ใช้ mysqldump ได้บ้าง (บางส่วน) (ฉันควรถามคำถามใหม่เกี่ยวกับเรื่องนี้หรือไม่)
Gerrit avatar
cn flag
เพียงแค่ --flush-logs ภายในบรรทัดคำสั่ง mysqldump มีข้อเสียในการล้างข้อมูลนี้สำหรับแต่ละฐานข้อมูลในการถ่ายโอนข้อมูล จากนั้นคุณควรใช้ร่วมกับตัวเลือก --master-data และ --single-transaction ซึ่งจะทำให้คุณสามารถใช้บันทึกไบนารีสำหรับการกู้คืนจุดในเวลาพร้อมกับการสำรองข้อมูลทั้งหมดล่าสุด แต่นั่นก็คุ้มค่ากับคำถามใหม่
Score:1
ธง ua

กำหนดค่า binlog_expire_logs_seconds. 86400 จะบอกว่าให้กวาดล้างท่อนซุงทุกวัน ฉันต้องการขยายเวลาเป็นหนึ่งหรือสองสัปดาห์

ในขณะเดียวกันให้ตรวจสอบ max_binlog_size. หากคุณต้องการให้ลบไฟล์บินล็อกทุกวัน และคุณกำลังสร้าง 5MB/วัน ฉันขอแนะนำให้ตั้งค่านี้เป็น 100M

การล้างหลังจากหนึ่งวันและ 100M จะทำให้การใช้ดิสก์อยู่ระหว่าง 500 ถึง 600M (หรืออาจเป็น 500M และ 1100M ฉันไม่ทราบอัลกอริทึมที่แน่นอน)

500M ต่อวันดูเหมือนจะมาก คุณอัปเดตทุกแถวในตารางขนาดใหญ่บ่อยไหม หรืออย่างอื่น?

ยอมรับว่าการกำหนดค่าเริ่มต้นอาจไม่ดีที่สุด มีสถานการณ์เริ่มต้นหลายอย่างที่ต้องพิจารณา และการติดตั้งจะไม่ถามคุณว่าคุณต้องการอะไร:

  • การจำลองแบบ (ต้องการ binlog สำหรับสิ่งนั้น) 'หมดอายุ' อาจถูกผิดนัด
  • ต้องการ 'การกู้คืนจุดในเวลา' ต้องการ binlog อีกครั้ง แต่ค่าเริ่มต้นที่ดีคืออะไร
  • ไม่จำเป็นต้องบินล็อก
  • อื่นๆ?
in flag
ดังนั้นในการตั้งค่าเริ่มต้นของ Ubuntu binlogs จะถูกเก็บไว้ตลอดไปหรือไม่
ua flag
@Alex - ฉันคิดอย่างนั้น แต่ฉันไม่มีหลักฐานสนับสนุน บริการคลาวด์มีแนวโน้มที่จะเพิ่มการตั้งค่าดังกล่าว

โพสต์คำตอบ

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