一個腳本每天自動備份

這篇文章是 2012 年小蛙寫的,現在放在這邊給有需要的人,透過一個腳本 + crontab 來讓主機每天固定時間進行備份,後面還可以串上 Dropbox, Google Drive 或是 rsync 到特定地方儲存,多備份到雲端讓資料更穩妥。

有一些經常性要執行的,或是省時間記錄一次就好的「功能導向」的系列指令,例如:小蛙在設定 Docker 的時候,希望每次 Docker 開啟來都會設定好的環境,這種時候有兩個做法 1. 重新製作 image 讓他可以符合自己的需求,或是 2. 寫一個腳本檔,有新安裝的環境時,執行一次該腳本就可以自動進行設定或部署。

這類的腳本通常叫做 shell script,今天這邊會放上一個小蛙自己在用備份的 script,大概提一下需要注意的事項

  1. 第一行一定要是 #!/bin/bash
  2. 要有執行權限,至少要 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是小蛙要記錄備份是否有正確執行,如果不需要的話直接拿掉就可以囉!

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

    這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料