เมื่อต้องมีการแก้ไข database ควรมีการสำรองข้อมูลเก็บไว้ เผื่อในกรณีฉุกเฉินที่ไม่สามารถกู้คืนข้อมูลได้ โดยการสำรองข้อมูลเก็บไว้นั้นก็ควรจะเป็นข้อมูลที่อัพเดทที่สุดและไม่ควรต้องมีการมานั่ง manually back up เอง
เราจึงขอเสนอวิธีการสำรองข้อมูลด้วยการใช้ crontab ซึ่งจะช่วยอำนวยความสะดวกสบายในการสำรองข้อมูลอย่าง automatically ตามความถี่ที่เราต้องการ
ขออธิบายไว้ 3 ขั้นตอนสั้นๆ ดังนี้
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
Drop us a line and we will get back to you