วิธีการสำรอง (Backup) ฐานข้อมูล MySql  นั้นมีหลายแบบ อีกวิธีนึงที่ไม่ค่อยยุ่งยากมากนักคือสำรองเป็นไฟล์ .gz เพื่อบีบอัดไว้ไว้ใน Linux Server ของตัวเอง โดยให้สำรองข้อมูลทุกวันตามเวลาที่กำหนด และการตั้งชื่อไฟล์ก็อาจจะตั้งตามวันที่สำรองในวันนั้นเลยจะได้รู้ว่าเป็นของวันไหน

ยกตัวอย่างดังนี้นะครับ

– Host name : localhost

– Database name : webdb

– Username : root

– Password : mypassword

– จะ Backup ไปไว้ที่ /my_backup/db/  (สร้าง folder เตรียมไว้ก่อนเลยนะครับ)

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

mysqldump -uroot -hlocalhost -pmypassword webdb | gzip > /my_backup/db/backup_`date +\%y\%m\%d`.sql.gz

เมื่อรันคำสั่งด้านบนแล้วก็ลองเข้าไปใน Path ที่เรา Backup ไว้ว่ามีไฟล์หรือไม่ เอาละสมมติว่าไฟล์ที่เรา Backup นั้นได้มาเป็นชื่อ  “backup_170930.sql.gz”  และเราลองมาทำสอบ Restore กลับมาดูว่าไฟล์นั้นสมบูรณ์และมันสามารถนำกลับมาใช้อย่างถูกต้องหรือไม่ ให้ใช้คำสั่งดังนี้ครับ

gunzip < /my_backup/db/backup_170930.sql.gz | mysql -uroot -hlocalhost -pmypassword webdb

ทีนี้เราอยากจะให้มัน Backup ทุกวันเอาเป็นช่วงเวลา 2:30 คนน่าจะใช้น้อยสุดก็เพียงแต่นำคำสั่งนี้ไปใช้ร่วมกับ Crontab โดยให้พิมพ์คำสั่ง

crontab e

จากนั้นนำคำสั่งนี้ไปใส่ไว้ใน Crontab

30 2 * * *   /usr/local/bin/mysqldump  -uroot -hlocalhost -pmypassword webdb | gzip > /my_backup/db/backup_`date +\%y\%m\%d`.sql.gz

สังเกตุตรง “/usr/local/bin/mysqldump” จะเป็นการอ้าง Path เต็มนะครับ (ตรงนี้บาง Server อาจจะอยู่ที่ Path อื่นคงต้องดูกันอีกทีนะครับ) เพราะว่าบางครั้งอยู่ใน Crontab แล้วมันไม่สามารถ Run ได้ ถ้าเคสนี้ก็ Zip ผ่านแต่ไฟล์จะว่างเปล่า เลข 30 คือนาที ส่วนเลข 2 คือชั่วโมงครับ

ทีนี้ก็จะได้ระบบ Backup ฐานข้อมูล MySql ไว้ใช้งานแล้วครับ แต่ถ้าจะให้ดีควร Backup ไว้นอก Server ด้วยก็ดีเผื่อเกิดข้อผิดพลาดร้ายแรงเช่น ไฟไหม้หรือ HDD พังเป็นต้นครับ ส่วนใครหา path ของ mysqldump ลองดูตามรายการนี้เผื่อมีครับ

/usr/local/bin/mysqldump
/usr/local/mysql/bin/mysqldump
/usr/mysql/bin/mysqldump
/usr/bin/mysqldump

ก็หวังว่าบทความนี้จะมีประโยชน์ไม่มากก็น้อยนะครับผม