เมื่อเซิร์ฟเวอร์ MySQL เริ่มทำงาน ระบบจะตรวจสอบบรรทัดคำสั่งเพื่อดูการดำเนินการเพื่อดูว่าควรเข้าสู่ระบบหรือไม่ และเปิดไฟล์บันทึกที่เหมาะสม (หากเป็นเช่นนั้น) คุณสามารถให้เซิร์ฟเวอร์สร้างไฟล์บันทึกได้สองประเภทหลัก: ไฟล์บันทึกปกติ รายงานการเชื่อมต่อไคลเอ็นต์ การสอบถาม และกิจกรรมอื่นๆ มากมาย เมื่อเซิร์ฟเวอร์ MySQL เริ่มทำงาน ระบบจะตรวจสอบบรรทัดคำสั่งเพื่อดูการดำเนินการเพื่อดูว่าควรเข้าสู่ระบบหรือไม่ และเปิดไฟล์บันทึกที่เหมาะสม (หากเป็นเช่นนั้น) คุณสามารถให้เซิร์ฟเวอร์สร้างไฟล์บันทึกได้สองประเภทหลัก: ไฟล์บันทึกปกติ รายงานการเชื่อมต่อไคลเอ็นต์ การสอบถาม และกิจกรรมอื่นๆ มากมาย มีประโยชน์สำหรับการติดตามกิจกรรมของเซิร์ฟเวอร์: ใครกำลังเชื่อมต่อ จากที่ไหน และทำอะไรอยู่
บันทึกการเปลี่ยนแปลง
รายงานแบบสอบถามที่แก้ไขฐานข้อมูล คำว่า "update" ในบริบทนี้ไม่ได้หมายถึงเฉพาะคำสั่ง UPDATE เท่านั้น แต่ยังรวมถึงคำสั่งทั้งหมดที่ปรับเปลี่ยนฐานข้อมูลด้วย ด้วยเหตุนี้ จึงประกอบด้วยระเบียนแบบสอบถามสำหรับ DELETE, INSERT, REPLACE, CREATE TABLE, DROP TABLE, GRANT และ REVOKE เนื้อหาของบันทึกการอัพเดตเขียนในรูปแบบของคำสั่ง SQL ซึ่งใช้เป็นอินพุตไปยัง mysql บันทึกการอัปเดตและการสำรองข้อมูลจะมีประโยชน์หากต้องกู้คืนตารางหลังจากเกิดข้อขัดข้อง คุณสามารถคืนค่าฐานข้อมูลจากไฟล์สำรองข้อมูล จากนั้นเรียกใช้แบบสอบถามใดๆ ที่แก้ไขฐานข้อมูลหลังจากไฟล์สำรองข้อมูลนั้นอีกครั้ง โดยใช้บันทึกการอัปเดตเป็นอินพุตใน mysql วิธีนี้จะคืนค่าตารางให้กลับสู่สถานะ ณ เวลาที่เกิดการขัดข้อง
เพื่อให้บันทึกมีประสิทธิภาพ ให้ใช้ตัวเลือก --log เพื่อเปิดใช้งานการบันทึกปกติ และตัวเลือก --log-update เพื่อเปิดใช้งานการบันทึกการอัปเดต ตัวเลือกเหล่านี้สามารถระบุได้บนบรรทัดคำสั่งใน mysqld.safe_mysqld หรือ mysql.server หรือในกลุ่ม [mysqld] ของตัวเลือก เมื่อเปิดใช้งานการบันทึก ไฟล์บันทึกจะถูกเขียนไปยังไดเร็กทอรีข้อมูลของเซิร์ฟเวอร์ตามค่าเริ่มต้น
ผู้เขียนแนะนำให้บันทึกทั้งสองประเภทถูกต้องเมื่อใช้ MySQL เป็นครั้งแรก หลังจากที่คุณได้รับประสบการณ์กับ MySQL มาบ้างแล้ว คุณอาจถูกล่อลวงให้ใช้บันทึกการอัปเดตเพื่อลดความต้องการพื้นที่ดิสก์
หลังจากเปิดใช้งานการบันทึกแล้ว ต้องแน่ใจว่าไม่ได้ใส่ข้อมูลบันทึกจำนวนมากลงในดิสก์ โดยเฉพาะอย่างยิ่งหากเซิร์ฟเวอร์จัดการกับการสืบค้นจำนวนมาก การหมุนเวียนไฟล์บันทึกและเวลาหมดอายุสามารถใช้เพื่อป้องกันไม่ให้ไฟล์บันทึกเติบโตอย่างไม่มีขอบเขต ในขณะเดียวกันก็เก็บบันทึกล่าสุดไว้ทางออนไลน์
การหมุนไฟล์บันทึกทำงานดังนี้ สมมติว่าไฟล์บันทึกมีชื่อว่าบันทึก ในวงแรก บันทึกจะถูกเปลี่ยนชื่อ log 0 และเซิร์ฟเวอร์เริ่มเขียนไฟล์บันทึกใหม่ ในวงที่สอง log.0 จะถูกเปลี่ยนชื่อเป็น log.1 บันทึกจะถูกเปลี่ยนชื่อเป็น log.0 และเซิร์ฟเวอร์จะเริ่มเขียนไฟล์บันทึกใหม่อีกไฟล์ ด้วยวิธีนี้ แต่ละไฟล์จะวนไปตามชื่อ log .0, log .1 และอื่นๆ เมื่อไฟล์ถึงจุดใดจุดหนึ่งในลูป ก็สามารถยุติไฟล์ได้
อัปเดตบันทึกและคำสั่งโหลดข้อมูล
โดยปกติ เมื่อเซิร์ฟเวอร์ดำเนินการคำสั่ง LOAD DATE เซิร์ฟเวอร์จะเขียนเฉพาะคำสั่งนั้นเอง ไม่ใช่เนื้อหาแถวที่โหลด ลงในบันทึกการอัพเดต ซึ่งหมายความว่าการดำเนินการกู้คืนโดยใช้บันทึกการอัพเดตจะไม่สมบูรณ์เว้นแต่จะยังสามารถเข้าถึงไฟล์ข้อมูลได้ เพื่อให้แน่ใจว่าสิ่งนี้ปลอดภัย ไม่ควรลบไฟล์ข้อมูลเว้นแต่ว่าฐานข้อมูลจะได้รับการสำรองไว้แล้ว
การสำรองข้อมูลระบบ
บันทึกการอัพเดทอาจไม่ดีสำหรับการกู้คืนฐานข้อมูลเสมอไป และหากดิสก์ล่มทำให้คุณสูญเสียบันทึกการอัพเดท ตรวจสอบให้แน่ใจว่าคุณได้สำรองข้อมูลระบบไฟล์เป็นประจำ เป็นความคิดที่ดีที่จะเขียนบันทึกการอัพเดตไปยังดิสก์อื่นที่ไม่ใช่ที่จัดเก็บฐานข้อมูล
ตัวอย่างเช่น หากคุณวนรอบบันทึกทุกวันและต้องการเก็บบันทึกเป็นเวลาหนึ่งสัปดาห์ คุณจะเก็บ log.0 ไว้เป็น log.6 ในลูปถัดไป log.6 จะถูกยกเลิกโดยปล่อยให้ log.5 เขียนทับ log.6 ให้เป็น log.6 ใหม่ ด้วยวิธีนี้ คุณสามารถเก็บบันทึกได้จำนวนมากโดยไม่เกินขีดจำกัดของดิสก์
ความถี่ของการหมุนเวียนบันทึกและจำนวนบันทึกเก่าที่เก็บจะขึ้นอยู่กับความยุ่งของเซิร์ฟเวอร์ (เซิร์ฟเวอร์ที่ใช้งานอยู่จะสร้างข้อความบันทึกมากขึ้น) และพื้นที่ดิสก์ที่คุณต้องการจัดสรรให้กับบันทึกเก่า เมื่อหมุนเวียนบันทึกปกติ คุณสามารถใช้คำสั่ง mysqla d - min flush-logs เพื่อบอกให้เซิร์ฟเวอร์ปิดไฟล์บันทึกปัจจุบันและเปิดไฟล์บันทึกใหม่
สคริปต์ที่ทำการหมุนเวียนบันทึกปกติจะมีลักษณะดังนี้ (ซึ่งสามารถแก้ไขได้เพื่อแสดงชื่อฐานบันทึกและตำแหน่งของไดเร็กทอรีข้อมูลของคุณ และอาจรวมถึงจำนวนบันทึกเก่าที่คุณต้องการเก็บรักษา):
วิธีที่ดีที่สุดคือรันสคริปต์นี้จากบัญชี mysqladm เพื่อให้แน่ใจว่าไฟล์บันทึกเป็นของผู้ใช้รายนั้น หากคุณปล่อยพารามิเตอร์การเชื่อมต่อไว้ในไฟล์ตัวเลือก .my.cnf คุณไม่จำเป็นต้องระบุพารามิเตอร์ใดๆ ในคำสั่ง mysqladmin ของสคริปต์ หากคุณไม่ทำเช่นนี้ คุณสามารถสร้างผู้ใช้แบบจำกัดที่ไม่ทำอะไรเลยนอกจากออกคำสั่งรีเฟรช รหัสผ่านของผู้ใช้รายนี้สามารถใส่ไว้ในสคริปต์ได้โดยมีความเสี่ยงน้อยที่สุด หากคุณต้องการทำเช่นนี้ ผู้ใช้ควรมีสิทธิ์ RELOAD เท่านั้น ตัวอย่างเช่น หากต้องการเรียกใช้ user flush และกำหนดรหัสผ่าน fl us h pass ให้ใช้คำสั่ง GRANT ต่อไปนี้:
ให้สิทธิ์โหลดซ้ำบน *.* เพื่อ flush@localhost ระบุโดย "flushpass"
เมื่อคุณต้องการดำเนินการรีเฟรชในสคริปต์ คุณสามารถทำได้:
mysqladmin -ufush -pflushpass ล้าง -logs
ใน Linux ควรใช้ logrotate เพื่อติดตั้งสคริปต์ mysql-log-rotate ในแพ็คเกจการแจกจ่าย MySQL แทนที่จะเขียนสคริปต์ด้วยตัวเอง หากไม่ได้ติดตั้ง mysql-log-rotate โดยอัตโนมัติผ่านไฟล์ RPM คุณควรตรวจสอบไดเร็กทอรีไฟล์สนับสนุนของแพ็คเกจการแจกจ่าย MySQL
เนื่องจากความแตกต่างในวิธีที่เซิร์ฟเวอร์จัดการไฟล์บันทึกการอัพเดท การหมุนเวียนไฟล์บันทึกจะแตกต่างกันเล็กน้อยระหว่างบันทึกการอัพเดทและบันทึกปกติ หากคุณบอกให้เซิร์ฟเวอร์ใช้ชื่อไฟล์บันทึกการอัพเดตโดยไม่มีนามสกุล (เช่น วันที่อัปเดต) เซิร์ฟเวอร์จะสร้างชื่อไฟล์บันทึกการอัพเดตโดยอัตโนมัติโดยใช้ลำดับวันที่อัปเดต, update.002 เป็นต้น บันทึกการอัปเดตใหม่จะถูกสร้างขึ้นเมื่อเซิร์ฟเวอร์เริ่มทำงานและเมื่อมีการรีเฟรชบันทึก หากคุณเปิดใช้งานการบันทึกการอัพเดตโดยไม่ระบุชื่อไฟล์ เซิร์ฟเวอร์จะสร้างลำดับของไฟล์บันทึกการอัพเดตโดยใช้ชื่อโฮสต์เป็นชื่อฐาน
เมื่อยกเลิกลำดับของไฟล์ที่สร้างขึ้นด้วยวิธีนี้ คุณอาจต้องการยุติไฟล์โดยอิงตามอายุ (เวลาที่แก้ไขครั้งล่าสุด) แทนที่จะใช้ชื่อ เหตุผลก็คือ เนื่องจากคุณไม่ทราบว่าคำสั่งflush-logจะออกเมื่อใด คุณจึงไม่สามารถคาดหวังที่จะสร้างบันทึกการอัปเดตในจำนวนคงที่ในช่วงเวลาที่กำหนดได้ ตัวอย่างเช่น หากคุณสำรองข้อมูลตารางด้วย mysqldump และใช้ตัวเลือก --flush-logs ไฟล์ใหม่ในลำดับชื่อบันทึกการอัปเดตจะถูกสร้างขึ้นพร้อมกับการสำรองข้อมูลแต่ละครั้ง
สำหรับบันทึกการอัปเดตที่มีชื่อไฟล์ตามลำดับที่สร้างขึ้นโดยอัตโนมัติโดยเซิร์ฟเวอร์ สคริปต์การยกเลิกตามอายุของบันทึกจะมีลักษณะดังนี้:
คำสั่ง find จะค้นหาและลบไฟล์บันทึกการอัพเดตที่ถูกแก้ไขมากกว่าหนึ่งสัปดาห์ที่ผ่านมา สิ่งสำคัญคือต้องใช้พารามิเตอร์ -name เพื่อทดสอบนามสกุลไฟล์ตัวเลข เพื่อหลีกเลี่ยงการลบตารางที่ระบุโดยการอัพเดตที่ไม่ถูกต้อง
คุณยังสามารถบอกให้เซิร์ฟเวอร์ใช้ชื่อไฟล์บันทึกการอัพเดทคงที่ (หากต้องการ) ซึ่งมีประโยชน์หากคุณต้องการวนรอบบันทึกการอัพเดทในลักษณะเดียวกับบันทึกปกติ หากต้องการใช้ชื่อบันทึกการอัปเดตแบบคงที่ ให้ระบุชื่อที่มีส่วนขยาย ตัวอย่างเช่น คุณสามารถเริ่มต้นเซิร์ฟเวอร์ด้วยตัวเลือก --log-update=update.log เพื่อใช้ชื่อ up date .log เซิร์ฟเวอร์จะปิดระบบเสมอและเปิดบันทึกเมื่อได้รับคำสั่ง flush-logs แต่เซิร์ฟเวอร์จะไม่สร้างไฟล์ใหม่ทุกครั้ง ในกรณีนี้ สคริปต์การหมุนเวียนบันทึกสำหรับบันทึกการอัปเดตและสคริปต์สำหรับบันทึกปกติจะแตกต่างกันในชื่อฐานไฟล์ของการหมุนเวียนเท่านั้น
หากคุณต้องการหมุนและยกเลิกบันทึกโดยอัตโนมัติ ให้ใช้ cron สันนิษฐานว่าสคริปต์สำหรับการหมุนเวียนบันทึกปกติและบันทึกการอัพเดตคือ บันทึกการหมุนเวียน และวันที่หมุนเวียน - บันทึก และติดตั้งไว้ในไดเร็กทอรี /usr/user/mysql/bin ลงทะเบียนเป็นผู้ใช้ mysqlladm จากนั้นใช้คำสั่งต่อไปนี้เพื่อแก้ไขไฟล์ crontab ของผู้ใช้ mysqladm: % crontab -e
คำสั่งนี้อนุญาตให้แก้ไขข้อมูลสำรองของไฟล์ crontab ปัจจุบัน (อาจว่างเปล่าหากยังไม่เคยทำมาก่อน) เพิ่มบรรทัดลงในไฟล์ดังต่อไปนี้:
รายการนี้บอกให้ cron รันสคริปต์นี้ทุกเช้าเวลาตีสี่ คุณสามารถเปลี่ยนเวลาหรือกำหนดเวลาได้ตามต้องการ ดูหน้าคู่มือ crontab สำหรับคำแนะนำ
-