Mongo Database Backups with crontab

เมื่อต้องมีการแก้ไข database ควรมีการสำรองข้อมูลเก็บไว้ เผื่อในกรณีฉุกเฉินที่ไม่สามารถกู้คืนข้อมูลได้ โดยการสำรองข้อมูลเก็บไว้นั้นก็ควรจะเป็นข้อมูลที่อัพเดทที่สุดและไม่ควรต้องมีการมานั่ง manually back up เอง

เราจึงขอเสนอวิธีการสำรองข้อมูลด้วยการใช้ crontab ซึ่งจะช่วยอำนวยความสะดวกสบายในการสำรองข้อมูลอย่าง automatically ตามความถี่ที่เราต้องการ

ขออธิบายไว้ 3 ขั้นตอนสั้นๆ ดังนี้

  • เขียน script ที่สร้าง directory โดยอัตโนมัติ อาจจะตั้งชื่อตามวันที่และเวลาหรืออื่นๆตามท่านต้องการ และสำรองฐานข้อมูล database ไว้ใน directory ที่เราได้สร้างไว้
  • นำ script ไปวางไว้ใน server หรือที่ที่สามารถรัน cron script ได้
  • ตั้งค่าเวลาที่ต้องการสำรองข้อมูลใน cron script นั้น

Initial Step : สร้าง db_backup directory ไว้ใน path ที่เราต้องการเก็บสำรองไฟล์ข้อมูลของเรา

mkdir db_backup

Step 1 : เขียน script สร้าง directory และสำรองฐานข้อมูลไว้ใน directory นั้น

#!/bin/sh
DIR=`date +%y-%m-%d`
DEST=/db_backup/$DIR
mkdir $DEST
mongodump -h <your_database_host> -d <your_database_name> -u <username> -p <password> -o $DEST

ชื่อ directory ใช้เป็นวันที่ที่สำรองข้อมูลอยู่ในรูปแบบ yy-mm-dd (18–03–20) สำหรับmongodump หากอยู่ในเครื่องserverที่ใช้เก็บ database อยู่แล้วสามารถใช้คำสั่งนี้แทนได้

mongodump -d <your_database_name> -o $DEST

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

cd db_backup
NUM_FILE="$(ls | wc -l)"
if [ "$NUM_FILE" -gt 5 ];
then
    FILE_NAME="$(ls -t | tail -n -1)"
    rm -r $FILE_NAME
fi

Step 2 : ตั้งค่า cron script ให้รัน script ที่สำรองข้อมูลทุกๆความถี่ที่เราตั้ง

เราสามารถตั้งค่าความถี่ในการสำรองข้อมูลตามวันและเวลาได้ตามที่ต้องการ โดยใช้ crontab file ซึ่งจะเป็นการรันคำสั่งแบบอัตโนมัติให้ตามเวลาที่เราได้ตั้งไว้ โดยเราไม่จำเป็นต้องมีการ manually run command เอง

เปิด crontab โดยใช้คำสั่ง

sudo crontab -e

เมื่อเปิดไฟล์ crontab ขึ้นมา ให้เติมคำสั่งต่อไปนี้ที่ด้านล่างของ comments สมมติให้เราต้องการสำรองข้อมูลทุกวัน โดยกำหนดให้เป็นเวลาเที่ยงคืนของทุกวัน

0 0 * * * ../../scripts/db_backup.sh

save และออกจากไฟล์ เท่านี้ก็เป็นอันจบขั้นตอนการ back up database แบบ automatically

format time ของ crontab เป็นดังตารางข้างล่างนี้ (* แทน ค่าใดๆ)

# Minute   Hour    Day of     Month      Day of Week     Command
                Month 
# (0-59)  (0-23)   (1-31)    (1-12 or      (0-6 or       command                            
                         Jan-Dec)      Sun-Sat)
# every 15 minutes
#   */15     *       *          *              *         python.py

credit : https://coderwall.com/p/hdmmnq/easy-automatic-nightly-backups-for-mongodb

Have a question?

Drop us a line and we will get back to you