這邊是以線上運作中的 web 網站作為目標備份,備份包含運作中、不包含git內的上傳檔案、資料庫資料內容。不包含系統環境、環境設定檔。在講異地備份之前,提一下自己心目中的異地備份服務是從 VPS 廠商出發的:
- 如果資料庫是獨立服務,可以把資料庫當成一個獨立伺服器的運作方式,如果不是,則需要定期/手動操作把 sql 檔案轉換出來。
- 對於一個獨立伺服器,確定他是否使用額外硬碟。如果是額外硬碟責備份額外硬碟即可。
- 廠商提供備份與下載服務。如果沒有下載,應該也能夠提供備份至不同地區的資料中心的服務。
- 提供備援(備份且恢復資料)服務。
如果廠商提供異地備援(備份+還原)的功能,這會是好的。需要考慮的有:
- 網站使用的狀態,會考慮到需要備份的頻率。
- 網站重要性。是否不能斷線?是否有資安問題、金流問題?是否實時有用戶在使用?
- 有沒有需要備份可編輯的原始碼?
- 能不能正確的抵擋天災、人禍?
—
這次因為種種原因,以從系統環境的層級著手處理異地備份。
異地備份如果要把檔案下載到電腦上再儲存起來實嫌麻煩,嘗試讓他跟自己常用的服務做雲端傳輸就好。於是我選了使用 Dropbox 做備份,筆記下來。
實作的目標是:備份檔案、資料庫。
使用的服務與環境是:debian 11, dropbox, Dropbox-Uploader, mysql_backup.sh
這邊採用手動單次操作,如果需要用 cront job 動作的話要請配置好一個 script。
手動操作的流程是:
- zip 要備份的檔案
- 透過 dropbox-uploader 上傳
- backup mysql 資料庫們
- 透過 dropbox-uploader 上傳
幾個注意事項:
- 網站檔案記得先 zip ,要不檔案(尤其是 uploads/ )多到會瘋掉。
- 資料庫備份預設會被壓縮成 .sql.gz 。
- mysql 備份檔案內不會有對 database 的 use / drop / create 動作,要的話要自己加。
- dropbox-uploader 會執行多個會單個操作,其實沒啥影響,都是用同一個 upload 指令。
- 如果使用終端機 ssh 進去 server 的話,建議 keep session 操作避免長時間等待不小心離線,我是使用 screen 來實現,這是介紹。
再來關於兩個 shell script 的操作說明。
—
關於 mysql_backup.sh 操作:
請先下載 shell 或是創建以後複製貼上,記得更新權限
chmod +x mysql_backup.sh
設定其中的資料夾位置、帳號密碼,如果 mysql 路徑不一樣的話記得變更 PATH 變數, KEEP_BACKUPS_FOR 他會檢查路徑中舊的檔案來保留/移除,如果是用 cron job 動作的話好用。

這定完成以後執行即可,會有資訊顯示。
./backup_mysql.sh
—
關於 Dropbox-Uploader 的操作:
首先先下載 script
curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh
設定權限並且執行他
chmod +x dropbox_uploader.sh
./dropbox_uploader.sh
系統會提示怎麼做,主要幾個步驟:
- 請開啟 dropbox developer 創建一個 app ,選擇 App folder 的 type 並且創建好名字。
- 創建完之後,在 Permissions 的 tab 中選擇 “files.metadata.read/write” 和 “files.content.read/write” 這四個權限。記得點擊 Submit 送出。
- 在 Settings 的 tab 中找到 App key 並且點擊 show 顯示 App secret ,記錄起來。
- 回到指令列上,依照要求輸入 key, secret
- 接著會跳出 access token 的請求網址,用瀏覽器開啟,會得到一組 token,依照要求把這組 token 輸入進去。
- 提示是否確認,輸入確認「y」之後就可以使用了。





可用的指令可參考官網,這邊附上範例和中文翻譯:



基本上會使用到的就是 upload 這個指令而已。
另外,如果資料輸入錯誤,或是手動上傳完畢了不想留資料,除了移除 dropbox 的 app 之外,記得執行刪除設定檔的動作:
rm ~/.dropbox_uploader
以上。
—
同場加映
Bash Script to backup all MySQL databases
gist.github.comBash Script to backup all MySQL databases. GitHub Gist: instantly share code, notes, and snippets.
GitHub – andreafabrizi/Dropbox-Uploader: Dropbox Uploader is a BASH script which can be used to …
github.comDropbox Uploader is a BASH script which can be used to upload, download, list or delete files from Dropbox, an online file sharing, synchronization and backup service. – …