1. บทนำ
การสำรองข้อมูลและการกู้คืนฐานข้อมูล MySQL เป็นขั้นตอนสำคัญเพื่อรักษาความปลอดภัยและเสถียรภาพของระบบ หากเกิดการสูญหายของข้อมูลหรือเกิดปัญหากับเซิร์ฟเวอร์ จำเป็นต้องมีการเตรียมความพร้อมในการกู้คืนอย่างรวดเร็ว mysqldump เป็นเครื่องมือยอดนิยมในการสำรองฐานข้อมูล MySQL ที่มีไวยากรณ์เรียบง่ายและมีตัวเลือกหลากหลายที่สามารถใช้งานได้อย่างยืดหยุ่น
บทความนี้จะอธิบายตั้งแต่พื้นฐานการใช้ mysqldump ไปจนถึงการใช้งานตัวเลือกขั้นสูง และวิธีการกู้คืนข้อมูลจากไฟล์สำรองอย่างละเอียด
2. ไวยากรณ์พื้นฐานของ mysqldump
mysqldump เป็นคำสั่งที่ใช้ในการดัมพ์ (Export) ข้อมูลและโครงสร้างจากฐานข้อมูล MySQL มาดูกันว่าไวยากรณ์พื้นฐานมีลักษณะอย่างไร
mysqldump -u [ชื่อผู้ใช้] -p [ชื่อฐานข้อมูล] > [ชื่อไฟล์.sql]
คำอธิบายพารามิเตอร์
- -u [ชื่อผู้ใช้]: ระบุชื่อผู้ใช้สำหรับการเชื่อมต่อ MySQL
- -p: ระบุรหัสผ่าน (ถ้าไม่ใส่ จะมีการถามในรูปแบบโต้ตอบ)
- [ชื่อฐานข้อมูล]: ชื่อฐานข้อมูลที่ต้องการสำรอง
- > [ชื่อไฟล์]: ระบุเส้นทางและชื่อไฟล์ที่จะเก็บข้อมูลดัมพ์
เราสามารถเพิ่มตัวเลือกต่าง ๆ เข้ากับไวยากรณ์นี้เพื่อสร้างไฟล์สำรองที่เหมาะสมกับสถานการณ์ต่าง ๆ
ตัวอย่างคำสั่ง
mysqldump -u root -p my_database > my_database_backup.sql
คำสั่งนี้จะทำการสำรองฐานข้อมูล my_database
ไปยังไฟล์ชื่อ my_database_backup.sql

3. ตัวเลือกทั่วไปและวิธีใช้งาน
3.1 –all-databases
ใช้ --all-databases
เพื่อสำรองฐานข้อมูลทั้งหมดใน MySQL server ได้ในครั้งเดียว เหมาะสำหรับการจัดการหลายฐานข้อมูลพร้อมกัน
mysqldump -u root -p --all-databases > all_databases_backup.sql
3.2 –no-data
ใช้ --no-data
เพื่อดัมพ์เฉพาะโครงสร้างของฐานข้อมูลโดยไม่รวมข้อมูลจริง เหมาะสำหรับการโคลนโครงสร้างตาราง
mysqldump -u root -p --no-data my_database > my_database_schema.sql
3.3 –add-drop-table
--add-drop-table
จะเพิ่มคำสั่ง DROP TABLE
ลงในไฟล์สำรอง เพื่อหลีกเลี่ยงการซ้ำซ้อนของตารางเมื่อกู้คืน เหมาะสำหรับการเขียนทับตารางที่มีอยู่แล้ว
mysqldump -u root -p --add-drop-table my_database > my_database_backup.sql
3.4 –lock-tables
ตัวเลือก --lock-tables
จะทำการล็อกตารางระหว่างการสำรอง เพื่อป้องกันไม่ให้ข้อมูลเปลี่ยนแปลงระหว่างการดัมพ์ เหมาะกับการใช้งานกับฐานข้อมูลที่มีการใช้งานจริง (Live Database)
mysqldump -u root -p --lock-tables my_database > locked_backup.sql
4. ตัวเลือกขั้นสูง
4.1 การใช้ –where สำหรับการสำรองแบบมีเงื่อนไข
--where
ใช้เพื่อกรองข้อมูลตามเงื่อนไข เช่น สำรองเฉพาะข้อมูลที่สร้างหลังจากวันที่กำหนด
mysqldump -u root -p my_database --where="created_at >= '2023-01-01'" > filtered_data_backup.sql
ตัวอย่างนี้จะสำรองเฉพาะข้อมูลที่ created_at
มีค่าเท่ากับหรือหลังวันที่ 1 มกราคม 2023
4.2 –xml
--xml
ใช้เพื่อส่งออกข้อมูลในรูปแบบ XML เหมาะสำหรับระบบหรือแอปพลิเคชันที่ต้องการข้อมูล XML
mysqldump -u root -p --xml my_database > database_backup.xml

5. การกู้คืนข้อมูลด้วย mysqldump
เพื่อกู้คืนฐานข้อมูลจากไฟล์ที่สร้างด้วย mysqldump ให้ใช้คำสั่ง mysql
mysql -u [ชื่อผู้ใช้] -p [ชื่อฐานข้อมูล] < [ไฟล์สำรอง.sql]
5.1 ตัวอย่างการกู้คืน
คำสั่งนี้จะแสดงวิธีการกู้คืนฐานข้อมูล my_database
จากไฟล์ my_database_backup.sql
mysql -u root -p my_database < my_database_backup.sql
ข้อควรระวัง
- ความเสี่ยงในการเขียนทับ: การกู้คืนอาจเขียนทับข้อมูลที่มีอยู่ ต้องใช้ความระมัดระวัง
- การตรวจสอบการเข้ารหัส: โดยเฉพาะเมื่อมีการใช้ตัวอักษรหลายไบต์ หากการเข้ารหัสไม่ตรงกัน ข้อมูลอาจกู้คืนไม่ถูกต้อง
6. เคล็ดลับกลยุทธ์การสำรองข้อมูล
6.1 การทำให้การสำรองข้อมูลเป็นแบบอัตโนมัติ
เนื่องจากข้อมูลในฐานข้อมูลมีการเปลี่ยนแปลงตลอดเวลา การทำให้การสำรองข้อมูลเป็นแบบอัตโนมัติเป็นสิ่งสำคัญ สามารถใช้ cron
เพื่อรันการสำรองทุกวัน
0 2 * * * mysqldump -u root -p my_database > /path/to/backup/my_database_$(date +%F).sql
ตัวอย่างนี้จะทำการสำรองทุกวันเวลา 2 นาฬิกา โดยชื่อไฟล์จะมีวันที่แนบอยู่
6.2 การสำรองแบบ Incremental
แทนที่จะสำรองข้อมูลทั้งหมดทุกครั้ง สามารถสำรองเฉพาะข้อมูลที่เปลี่ยนแปลงหรือเพิ่มเข้ามา เรียกว่า Incremental Backup ใช้ --where
เพื่อกรองข้อมูลล่าสุด ทำให้การสำรองมีประสิทธิภาพมากขึ้น

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