การสำรองข้อมูลและการกู้คืนข้อมูลแบบเพิ่มขึ้นใน MySQL ทำอย่างไร?

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

ดาวน์โหลดฟรี
สำหรับ VM, OS, DB, ไฟล์, NAS, ฯลฯ
sea-kantapohn

Updated by ซี กันตภณ on 2025/12/24

สารบัญ
  • บทนำเกี่ยวกับการสำรองข้อมูลแบบเพิ่มขึ้นทีละน้อย

  • บทนำเกี่ยวกับ Binlog

  • การสำรองข้อมูลเพิ่มขึ้นของ MySQL ทำ อย่างไร

  • การกู้คืนจากสำรองข้อมูลเพิ่มขึ้น MySQL ทำอย่างไร?

  • วิธีที่ง่ายกว่าในการสร้างการสำรองข้อมูลเพิ่มขึ้นของ MySQL

  • คำถามที่พบบ่อยเกี่ยวกับการสำรองข้อมูลเพิ่มขึ้น MySQL

  • ข้อสรุป

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

บทนำเกี่ยวกับการสำรองข้อมูลแบบเพิ่มขึ้นทีละน้อย

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

ตัวอย่างเช่น หากเรามีฐานข้อมูลที่มีข้อมูล 20GB และมีข้อมูลเพิ่มเติมอีก 10MB ทุกวัน การสำรองข้อมูลแบบเต็มทุกวันจะทำให้เซิร์ฟเวอร์มีภาระหนัก ดังนั้นเราสามารถสำรองข้อมูลที่เพิ่มเข้ามาใหม่เท่านั้น เพื่อลดภาระของเซิร์ฟเวอร์

บทนำเกี่ยวกับ Binlog  

MySQL ไม่ได้ให้วิธีการสำรองข้อมูลแบบเพิ่มขึ้นโดยตรง แต่สามารถทำสำรองข้อมูลแบบเพิ่มขึ้นได้ทางอ้อมผ่านบันทึกไบนารีของ MySQL  

binlog จะถูกเปิดใช้งานโดยตัวเลือก log-bin ในไฟล์การกำหนดค่า MySQL จะสร้างไฟล์ใหม่สองไฟล์ ได้แก่ "XXX-bin.001" และ "xxx-bin.index" ในไดเรกทอรีรากข้อมูล หากไม่มีการระบุชื่อไฟล์ในตัวเลือกการกำหนดค่า MySQL จะใช้ชื่อโฮสต์ในการตั้งชื่อไฟล์ทั้งสองนี้ ไฟล์ ".index" มีรายการของไฟล์บันทึกทั้งหมด MySQL จะจดบันทึกการเปลี่ยนแปลงทั้งหมดที่เกี่ยวกับเนื้อหาและโครงสร้างของฐานข้อมูลไว้ในไฟล์ "XXX-bin.n" แต่จะไม่บันทึกคำสั่ง "SELECT" และ "UPDATE" ที่ไม่ได้มีการอัปเดตข้อมูลจริงๆ

เมื่อฐานข้อมูล MySQL หยุดหรือเริ่มต้นใหม่ เซิร์ฟเวอร์จะบันทึกข้อมูลไปยังไฟล์บันทึกถัดไป MySQL จะสร้างไฟล์บันทึกไบนารีชุดใหม่เมื่อมีการรีสตาร์ท โดยมีหมายเลขไฟล์เพิ่มขึ้นทีละหนึ่ง นอกจากนี้ หากไฟล์บันทึกมีขนาดเกินขีดจำกัดที่กำหนดโดยตัวแปรระบบ "max_binlog_size" ก็จะมีการสร้างไฟล์บันทึกใหม่เช่นกัน

การสำรองข้อมูลแบบเพิ่มขึ้นพึ่งพาเครื่องกลไก binlog ของ MySQL โดยทุกขั้นตอนของการแทรก อัปเดต ลบ และดำเนินการค้นหาในฐานข้อมูลจะถูกบันทึกไว้ใน binlog การเริ่มต้นด้วยการสำรองข้อมูลแบบเต็มพร้อมกับการล้าง binlog ในเวลาเดียวกัน ทำให้การดำเนินการทั้งหมดที่ตามมาจะถูกบันทึกไว้ในไฟล์ binlog ใหม่ สำหรับการสำรองข้อมูลแบบเพิ่มเติม เราจึงต้องสำรองเฉพาะไฟล์ binlog ที่สร้างขึ้นใหม่เท่านั้น ซึ่งช่วยให้สามารถสำรองข้อมูลฐานข้อมูลที่ขยายตัวอย่างต่อเนื่องได้อย่างสมบูรณ์แบบ

ความสำคัญของบันทึกไบนารีสำหรับการสำรองข้อมูลมีดังนี้

  • บันทึกไบนารีจัดเก็บการดำเนินการทั้งหมดที่อัปเดตหรืออาจอัปเดตข้อมูล

  • บันทึกไบนารีจะเริ่มการบันทึกหลังจากเซิร์ฟเวอร์ MySQL เริ่มทำงาน และจะสร้างไฟล์บันทึกใหม่เมื่อถึงขนาดไฟล์ที่ตั้งไว้ หรือเมื่อมีการดำเนินการคำสั่ง "flush logs"

  • โดยการดำเนินคำสั่ง "flush logs" เป็นระยะ เพื่อสร้างลำดับไฟล์บันทึกไบนารีใหม่ และจัดเก็บไฟล์เหล่านี้อย่างปลอดภัย จะทำให้การสำรองข้อมูลแบบเพิ่มขึ้นในช่วงเวลาหนึ่งเสร็จสมบูรณ์

การสำรองข้อมูลเพิ่มขึ้นของ MySQL ทำอย่างไร  

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

ขั้นตอนการสำรองข้อมูลเพิ่มขึ้นของ MySQL

1. เปิดใช้งานบันทึกไบนารีของ MySQL

ตั้งค่าพารามิเตอร์ต่อไปนี้ในไฟล์การกำหนดค่า MySQL ("my.cnf"):  

 [mysql]  
   log-bin=mysql-bin  
   server-id=1

พารามิเตอร์ "log-bin" ระบุคำนำหน้าไฟล์บันทึกแบบไบนารี และพารามิเตอร์ "server-id" ใช้ระบุอินสแตนซ์ MySQL อย่างไม่ซ้ำใคร

2. สร้างผู้ใช้งานสำรอง

 CREATE USER 'backup'@'localhost' IDENTIFIED BY 'your_password';  
 GRANT REPLICATION CLIENT, REPLICATION SLAVE, PROCESS, SUPER, RELOAD ON *.* TO 'backup'@'localhost';

 ที่นี่ "backup" คือชื่อผู้ใช้ ผู้ใช้ต้องมีสิทธิ์ดังต่อไปนี้ "REPLICATION CLIENT"  "REPLICATION SLAVE"  "PROCESS" "SUPER" และ "RELOAD"

3. ดำเนินการสำรองข้อมูลทั้งหมด

ใช้คำสั่ง "mysqldump" เพื่อสำรองข้อมูลฐานข้อมูล MySQL ทั้งหมดไปยังไฟล์:

mysqldump -u root -P 3306 -h 127.0.0.1 -p123456 ks_flask > ks_flask.sql

ที่นี่ "localhost" คือ โฮสต์ของ MySQL, "root" คือ ชื่อผู้ใช้ และ "ks_flask" คือ ชื่อฐานข้อมูล

4. บันทึกตำแหน่ง Binary Log ปัจจุบัน

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

SHOW MASTER STATUS;

คำสั่งนี้จะคืนค่าไฟล์บันทึกไบนารีปัจจุบันและตำแหน่ง

5. ดำเนินการสำรองข้อมูลแบบเพิ่มเติม

ใช้คำสั่ง "mysqlbinlog" พร้อมพารามิเตอร์ "--start-datetime", "--stop-datetime" และ "--start-position" เพื่อกำหนดช่วงเวลาและตำแหน่งสำรองข้อมูลก่อนหน้า

mysqlbinlog --start-datetime='2023-10-23 00:00:00'
--stop-datetime='2023-10-23 23:59:59'
--start-position=[previous position]
mysql-bin.000001 > incr_backup_2023-10-23.sql

ที่นี่ "[previous position]" คือตำแหน่งบันทึกไบนารีที่บันทึกไว้จากการสำรองข้อมูลครั้งล่าสุด

6. บันทึกตำแหน่งไบนารีล็อกใหม่

หลังจากดำเนินการสำรองข้อมูลแบบเพิ่มเติมแล้ว ให้ใช้คำสั่ง "SHOW MASTER STATUS" เพื่อบันทึกชื่อไฟล์บันทึกไบนารีและตำแหน่งใหม่สำหรับการสำรองข้อมูลแบบเพิ่มเติมครั้งต่อไป

SHOW MASTER STATUS;

7. ดำเนินการสำรองข้อมูลแบบเพิ่มขึ้นอย่างสม่ำเสมอ

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

8. กู้คืนข้อมูลจากสำรอง

   ผสานและกู้คืนข้อมูลสำรองแบบเต็มและเพิ่มขึ้นกลับไปยัง MySQL:  

mysql -hlocalhost -uroot -p your_database < ks_flask.sql  
mysql -hlocalhost -uroot -p your_database < incr_backup_2023-10-23.sql

หากมีการสำรองข้อมูลแบบเพิ่มขึ้นหลายชุด ให้กู้คืนตามลำดับเวลา

การกู้คืนจากสำรองข้อมูลเพิ่มขึ้น MySQL ทำอย่างไร?

มีสามวิธีทั่วไปสำหรับการกู้คืนแบบเพิ่มขึ้น การกู้คืนทั่วไป การกู้คืนตามตำแหน่ง และการกู้คืนตามช่วงเวลา

1. การกู้คืนทั่วไป

กู้คืนเนื้อหาบันทึกไบนารีทั้งหมดที่สำรองไว้

mysqlbinlog [--no-defaults] incremental backup file | mysql -u username -p password

2. การกู้คืนตามตำแหน่ง 

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

การกู้คืนไปยังตำแหน่งที่กำหนด

mysqlbinlog --stop-position='operation ID' binary log | mysql -u username -p password

การกู้คืนเริ่มจากตำแหน่งเฉพาะ  

mysqlbinlog --start-position='operation ID' binary log | mysql -u username -p password

3. การกู้คืนข้อมูล ณ จุดเวลาหนึ่ง  

ข้ามจุดเวลาที่ผิดพลาดเฉพาะเจาะจงเพื่อกู้คืนข้อมูล มีสามวิธี:  

1) การกู้คืนตั้งแต่จุดเริ่มต้นของบันทึกจนถึงจุดเวลาเฉพาะ  

mysqlbinlog [--no-defaults] --stop-datetime='YYYY-MM-DD HH:MM:SS' binary log | mysql -u username -p password

2) การกู้คืนจากจุดเวลาที่กำหนดถึงจุดสิ้นสุดของบันทึก

mysqlbinlog [--no-defaults] --start-datetime='YYYY-MM-DD HH:MM:SS' binary log | mysql -u username -p password

3) การกู้คืนจากจุดเวลาหนึ่งไปยังอีกจุดเวลาหนึ่ง  

mysqlbinlog [--no-defaults] --start-datetime='YYYY-MM-DD HH:MM:SS' --stop-datetime='YYYY-MM-DD HH:MM:SS' binary log | mysql -u username -p password

วิธีที่ง่ายกว่าในการสร้างการสำรองข้อมูลเพิ่มขึ้นของ MySQL

อย่างที่คุณเห็น กระบวนการทั้งหมดของการสำรองข้อมูลเพิ่มขึ้นและการกู้คืน MySQL โดยใช้บันทึกไบนารีนั้นซับซ้อนและใช้เวลานาน เนื่องจากเป็นการดำเนินการผ่านบรรทัดคำสั่ง คุณจะไม่มีโอกาสย้อนกลับหากคุณทำผิดพลาดระหว่างกระบวนการสำรองข้อมูลและการกู้คืน

โชคดีที่ซอฟต์แวร์สำรองข้อมูล MySQL ที่มีประสิทธิภาพอย่าง Vinchin Backup & Recovery มีอินเทอร์เฟซที่ใช้งานง่ายเพื่อให้สิ่งต่าง ๆ ง่ายขึ้น

Vinchin Backup & Recovery นำเสนอวิธีการสำรองข้อมูลและกู้คืนที่มีความอัตโนมัติมากกว่า มีประสิทธิภาพ และปลอดภัยยิ่งขึ้น โดยทำให้กระบวนการสำรองข้อมูล MySQL ง่ายขึ้นด้วยการจัดการแบบรวมศูนย์ การกู้คืนอย่างรวดเร็ว การสำรองข้อมูลแบบเพิ่มขึ้น และกลยุทธ์การจัดเก็บข้อมูลที่ยืดหยุ่น เพื่อรับประกันความสามารถในการเข้าถึงข้อมูลในระยะยาว นอกจากนี้ยังมีกลยุทธ์การสำรองข้อมูลที่ยืดหยุ่นสำหรับ Oracle DB, SQL Server, SQL Server, PostgreSQL, Postgres Pro และ MariaDB ซึ่งสามารถดำเนินการสำรองข้อมูลอัตโนมัติ สำรองข้อมูลแบบต่างระดับ และสำรองบันทึกธุรกรรมได้

ในการสร้างงานสำรองข้อมูลเพิ่มขึ้นของฐานข้อมูล MySQL โปรดไปที่หน้า การสำรองข้อมูลจริง> การสำรองข้อมูลฐานข้อมูล > การสำรองข้อมูล (โปรดทราบว่าการสำรองข้อมูลครั้งแรกต้องเป็นการสำรองข้อมูลแบบเต็มรูปแบบ):

1. เลือกฐานข้อมูลที่ต้องการสำรองข้อมูล

สร้างการสำรองข้อมูลเพิ่มเติม MySQL

2. เลือกโหนดสำรองที่คุณต้องการใช้ประมวลผลและจัดเก็บข้อมูลสำรอง

สร้างการสำรองข้อมูลเพิ่มเติม MySQL

3. ตั้งค่ากลยุทธ์การสำรองข้อมูลตามความต้องการของคุณ

สร้างการสำรองข้อมูลเพิ่มเติมของ MySQL

ที่นี่คุณสามารถเลือกการสำรองข้อมูลแบบเพิ่มขึ้นตามกำหนดเวลาได้

4. ตรวจสอบและยืนยันการตั้งค่า

สร้างการสำรองข้อมูลเพิ่มเติม MySQL

คลิกปุ่มด้านล่าง เพื่อลองใช้บริการทดลองใช้งานฟรี 60 วันของ Vinchin เพื่อสัมผัสประสบการณ์โซลูชันสำรองข้อมูลและกู้คืนข้อมูลที่มีประสิทธิภาพและเชื่อถือได้

คำถามที่พบบ่อยเกี่ยวกับการสำรองข้อมูลเพิ่มขึ้น MySQL

1. หากไฟล์บันทึกไบนารีถูกลบก่อนทำการกู้คืนข้อมูลสำรองเพิ่มขึ้นจะเกิดอะไรขึ้น?

หากไฟล์บันทึกไบนารีที่จำเป็นหายไป การกู้คืนอาจไม่สมบูรณ์ ซึ่งนำไปสู่การสูญเสียข้อมูลได้ ควรตรวจสอบเสมอว่ามีการเก็บรักษาบันทึกไบนารีไว้จนกว่าจะไม่จำเป็นต้องใช้อีกต่อไป

2. ผมควรจัดเก็บบันทึกไบนารีของ MySQL ไว้นานเท่าไรเพื่อสำรองข้อมูลแบบเพิ่มเติม?

ขึ้นอยู่กับนโยบายการสำรองข้อมูลของคุณ โดยทั่วไป ควรเก็บบันทึกไว้จนกว่าการสำรองข้อมูลแบบเต็มรูปแบบครั้งใหม่จะเสร็จสมบูรณ์และได้รับการยืนยัน

ข้อสรุป 

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

แชร์บน:

Categories: Database Backup