一個腳本每天自動備份
這篇文章是 2012 年小蛙寫的,現在放在這邊給有需要的人,透過一個腳本 + crontab 來讓主機每天固定時間進行備份,後面還可以串上 Dropbox, Google Drive 或是 rsync 到特定地方儲存,多備份到雲端讓資料更穩妥。
有一些經常性要執行的,或是省時間記錄一次就好的「功能導向」的系列指令,例如:小蛙在設定 Docker 的時候,希望每次 Docker 開啟來都會設定好的環境,這種時候有兩個做法 1. 重新製作 image 讓他可以符合自己的需求,或是 2. 寫一個腳本檔,有新安裝的環境時,執行一次該腳本就可以自動進行設定或部署。
這類的腳本通常叫做 shell script,今天這邊會放上一個小蛙自己在用備份的 script,大概提一下需要注意的事項
- 第一行一定要是 #!/bin/bash
- 要有執行權限,至少要 chmod 744 xxx.sh
撰寫腳本
# 備份所有資料庫,不壓縮(也可以加入壓縮指令)
function backupDB(){
mysqldump -u資料庫帳號 -p資料庫密碼 --all-databases > /root/Dropbox/vpsbackup/vps-databases-$(date +%Y%m%d).sql
}
# 備份 /var/www 目錄,並且壓縮(如果要備份其他的資料夾,也可以此類推)
function backupWWW(){
tar -jpc -f /root/Dropbox/vpsbackup/www-$(date +%Y%m%d).tar.bz2 /var/www
}
# 備份 /etc 目錄
function backupEtc(){
tar -jpc -f /root/Dropbox/vpsbackup/etc-$(date +%Y%m%d).tar.bz2 /etc
}
# 備份 /root 目錄,並且排除Dropbox資料夾
function backupRoot(){
tar -jpc -f /root/Dropbox/vpsbackup/root-$(date +%Y%m%d).tar.bz2 /root --exclude=Dropbox
}
case in
"db")
#執行備份db動作
backupDB;
;;
"www")
#備份www資料夾
backupWWW;
;;
"etc")
#備份/etc資料夾
backupEtc;
;;
"root")
#備份/root/shell資料夾
backupRoot;
;;
*)
#印出錯誤訊息及使用方式
echo ""
echo "Usage : ./backupProcess.sh [db | www]"
echo ""
echo " db : backup all databases."
echo " www : backup /var/www data."
echo " etc : backup /etc/data."
echo " root : backup /root/shell data."
echo ""
;;
esac 把檔案存成backupProcess.sh,確定 chmod 加入了可執行權限後,就可以這樣使用
/root/backupProcess.sh 備份種類(這些都可以依自己需求修改) /root/backupProcess.sh db
把備份動作加入自動排程
crontab -e # 設定排程器 crontab
# crontab –e # 每天早上三點五分備份/etc 5 3 * * * /root/backupProcess.sh etc >> /root/log/etc.log # 每天早上三點十分備份/root 10 3 * * * /root/backupProcess.sh root >> /root/log/root.log # 每天早上三點十五分備份database 15 3 * * * /root/backupProcess.sh db >> /root/log/db.log # 每個星期天上午三點半備份 /var/www 目錄 30 3 * * 0 /root/backupProcess.sh www >> /root/log/www.log # 每天早上四點開啟dropbox 0 4 * * * dropbox start >> /root/log/dropbox.log # 每天早上四點三十分關閉dropbox 30 4 * * * dropbox stop >> /root/log/dropbox.log
上面>> /root/log/etc.log是小蛙要記錄備份是否有正確執行,如果不需要的話直接拿掉就可以囉!