ตั้งเวลาสำรองฐานข้อมูล MySQL บน Linux
วิธีการสำรอง (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
ก็หวังว่าบทความนี้จะมีประโยชน์ไม่มากก็น้อยนะครับผม