一個腳本每天自動備份
這篇文章是 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
是小蛙要記錄備份是否有正確執行,如果不需要的話直接拿掉就可以囉!