Dropbox Uploader 的自動備份腳本 🔥☁️
把網站跟資料庫自動打包,直接丟進 Dropbox 雲端倉庫,再也不用擔心主機掛掉或空間不夠
為什麼要用 Dropbox 當備份終點站?先講真實痛點 😱
想像你的網站就像家裡的重要文件櫃。以前我們會把備份檔丟到 FTP 空間,或是寄到信箱。但 FTP 空間常常不夠大、信箱又有 25MB 限制,一碰到大型網站就卡住。這時候 Dropbox 就成了超好用的「雲端倉庫」。
Dropbox 是目前最熱門的雲端硬碟服務之一,免費帳號就有不錯的空間,付費版更是大得驚人。重點是:它穩定、跨平台、還能自動同步到你的電腦。只要把備份檔自動上傳到 Dropbox,就算主機整個炸了,你還能從任何地方把檔案抓回來。
這篇就是教你怎麼利用 GitHub 上超經典的 Dropbox Uploader [1] 程式,搭配以前那支備份 shell script,讓系統每天自動把網站檔案跟資料庫打包,直接送到 Dropbox。整個過程就像請一位不會抱怨的搬家工人,每天固定時間把東西搬到雲端倉庫,還會自動清理過期紙箱。
🔥 懶人包結論:只要設定一次 Dropbox Access Token + 一支腳本,就能每天自動備份網站與資料庫到 Dropbox,並自動刪除過期檔案。完全不用再手動上傳。
事前準備:取得 Dropbox 的「萬能鑰匙」🔑
要讓腳本能自動上傳,首先得拿到 Dropbox 的授權。這就像你要請搬家工人進你家倉庫,必須先給他一把專用鑰匙(Access Token)。以下是詳細步驟,一步一步跟著做就不會迷路。
- ❶ 登入 Dropbox 的開發控制台 [2],然後點擊 Create app。
- ❷ 接下來進入 DBX Platform 的設定頁面。權限一定要選「應用程式資料夾」(App folder),這樣腳本只能動到它自己的資料夾,不會影響你其他重要檔案。另外在 Name your app 的框框中,不能輸入有關 dropbox 的字樣,要特別注意,不然會被拒絕 🤓
- ❸ 點擊 Generated access token 此處產生 access token,然後立刻把它筆記下來。這串很長的英數字就是你的萬能鑰匙,千萬別公開給別人。
完成後你會看到類似這樣的畫面(原文附有截圖):
🚨 畫重點!千萬別踩雷:Access Token 一旦洩漏,別人就能任意上傳或刪除你 App 資料夾裡的檔案。建議只給這支腳本使用,不要亂貼到公開地方。
建立 Access Token 設定檔(把鑰匙放進專用抽屜)🗄️
拿到 Access Token 之後,我們要把它寫進系統,讓 Dropbox Uploader 知道怎麼用這把鑰匙。
直接建立 Dropbox Uploader 需要的 access token 設定值,將剛剛在 Dropbox 開發控制台產生的 access token 替換到下方 OOXX 的地方:
|
1 2 3 4 |
rm -f ~/.dropbox_uploader cat <<"EOF" > ~/.dropbox_uploader OAUTH_ACCESS_TOKEN=OOXX EOF |
這段指令的意思是:先刪掉舊的設定檔(如果有的話),再重新建立一個乾淨的設定檔,把你的 Access Token 寫進去。完成後,這個檔案就會躺在你的家目錄底下,變成腳本的專用鑰匙匣。
安裝 Dropbox Uploader(把搬家工人請回家)👷
接下來要把 Dropbox Uploader 本體下載到伺服器。建議放在
|
1 |
/opt |
目錄,乾淨又好管理。日後如果要升級,也是跑同樣的指令就好。
|
1 2 3 4 |
rm -f /opt/dropbox_uploader.sh cd /opt curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh chmod +x dropbox_uploader.sh |
這幾行指令做了什麼?
- ❶ 先刪掉舊版本(避免殘留)
- ❷ 進入
目錄1/opt
- ❸ 用 curl 直接從 GitHub 下載最新版腳本
- ❹ 給它執行權限,這樣系統才肯讓它跑
安裝完成後,你就可以用它來上傳、下載、刪除檔案了。這支程式非常輕量,不需要額外安裝一堆套件,特別適合 VPS 或精簡主機。
常用指令大全(像遙控器一樣好用)🎮
安裝好之後,先熟悉一下常用指令。這些指令就像給搬家工人下達的口令,清楚又直接。以下整理成表格,方便你日後查閱:
| 用途 | 指令範例 | 說明 |
|---|---|---|
| 檢查設定值 | /opt/dropbox_uploader.sh info | 確認 Access Token 是否正確 |
| 檢查空間大小 | /opt/dropbox_uploader.sh space | 看看 Dropbox 還剩多少空間 |
| 上傳單一檔案 | /opt/dropbox_uploader.sh upload OOXX.tar.gz / | 把檔案丟到 App 資料夾根目錄 |
| 上傳整個資料夾 | /opt/dropbox_uploader.sh upload /opt/Doc / | 連同裡面的子目錄一起上傳 |
| 下載檔案 | /opt/dropbox_uploader.sh download OOXX.tar.gz /opt | 從雲端抓回本機 |
| 下載資料夾 | /opt/dropbox_uploader.sh download Doc /opt | 連同子目錄一起下載 |
| 新增資料夾 | /opt/dropbox_uploader.sh mkdir Doc | 在雲端建立新資料夾 |
| 刪除檔案 | /opt/dropbox_uploader.sh delete OOXX.tar.gz | 刪除指定檔案 |
| 列表 | /opt/dropbox_uploader.sh list | 查看目前雲端有哪些檔案 |
完整指令列表如下(直接複製就能用):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# 檢查設定值 /opt/dropbox_uploader.sh info # 檢查Dropbox空間大小 /opt/dropbox_uploader.sh space # 上傳OOXX.tar.gz檔案到應用程式資料夾的根目錄 /opt/dropbox_uploader.sh upload OOXX.tar.gz / # 上傳資料夾/opt/Doc到應用程式資料夾的根目錄(/opt/Doc裡面的子目錄也一樣會上傳) /opt/dropbox_uploader.sh upload /opt/Doc / # 下載應用程式的根目錄底下的的OOXX.tar.gz到/opt資料夾 /opt/dropbox_uploader.sh download OOXX.tar.gz /opt # 下載Doc資料夾到/opt資料夾(Doc裡面的子目錄也一樣會下載) /opt/dropbox_uploader.sh download Doc /opt # 下載Doc資料夾底下的OOXX.tar.gz到/opt資料夾 /opt/dropbox_uploader.sh download Doc/OOXX.tar.gz /opt # 新增資料夾Doc /opt/dropbox_uploader.sh mkdir Doc # 新增子資料夾Manuals /opt/dropbox_uploader.sh mkdir Doc/Manuals # 刪除檔案OOXX.tar.gz /opt/dropbox_uploader.sh delete OOXX.tar.gz # 刪除Doc資料夾底下的OOXX.tar.gz /opt/dropbox_uploader.sh delete Doc/OOXX.tar.gz # 刪除Doc資料夾 /opt/dropbox_uploader.sh delete Doc # 刪除Doc資料夾底下的Manuals資料夾 /opt/dropbox_uploader.sh delete Doc/Manuals # 列表 /opt/dropbox_uploader.sh list # 列表Doc資料夾 /opt/dropbox_uploader.sh list /Doc # 列表Doc/Manuals資料夾 /opt/dropbox_uploader.sh list /Doc/Manuals |
建立完整備份腳本(把搬家流程自動化)📦
現在來到重頭戲!我們要把「備份資料庫 + 壓縮網站 + 上傳到 Dropbox + 刪除過期檔」整合成一支腳本。這樣以後只要執行一次,或是丟進 crontab,就能每天自動完成。
以下是完整腳本內容,記得把紅色提示的地方改成你自己的參數:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
touch /var/log/backup.log rm -f /root/MyUploader520be.sh cat <<"EOF" > /root/MyUploader520be.sh #!/bin/bash ############### 你要修改的地方從這裡開始 ############### DROPBOX_UPLOADER=/opt/dropbox_uploader.sh # Dropbox Uploader該程式位置 BACKUP_DIR=/opt/backup # 備份檔位置 WEB_DATA=/home/admin/web/ # 要備份的網站位置,可以空格做區隔備份多個位置 MYSQL_USER=root # MySQL使用者名稱 MYSQL_PASS=OOXX # MySQL密碼 MYSQL_PATH=mysql # MySQL程式路徑 MYSQLDUMP=mysqldump # MySQLDUMP程式路徑 MYSQLCHECK=mysqlcheck # MySQLCHECK程式路徑 ############### 你要修改的地方從這裡結束 ############### # 定義資料庫的名字和舊資料庫的名字 DBName=$HOSTNAME-MySQL_$(date +"%Y%m%d").tar.gz OldDB=$HOSTNAME-MySQL_$(date -d -7day +"%Y%m%d").tar.gz # 定義網站資料的名字和舊網站資料的名字 WebName=$HOSTNAME-Web_$(date +%Y%m%d).tar.gz OldWeb=$HOSTNAME-Web_$(date -d -7day +"%Y%m%d").tar.gz # 刪除本地7天前的資料庫 mkdir -p $BACKUP_DIR cd $BACKUP_DIR rm -f $BACKUP_DIR/$HOSTNAME-MySQL_$(date -d -7day +"%Y%m%d").tar.gz # 刪除本地1天前的網站資料 rm -f $BACKUP_DIR/$HOSTNAME-Web_$(date -d -1day +"%Y%m%d").tar.gz # 最佳化並自動修復資料庫 $MYSQLCHECK -u $MYSQL_USER -p$MYSQL_PASS -oA --auto-repair > /dev/null 2>&1 # 輸出資料庫,如果使用root帳號會輸出成一個資料庫一個SQL檔 for db in `$MYSQL_PATH -u $MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do ($MYSQLDUMP -u $MYSQL_USER -p$MYSQL_PASS --single-transaction --skip-lock-tables ${db} > ${db}.sql) done # 壓縮所有資料庫為一個壓縮檔並刪除所有的SQL檔 rm -f information_schema.sql mysql.sql performance_schema.sql tar zcfP $BACKUP_DIR/$DBName $BACKUP_DIR/*.sql rm -f $BACKUP_DIR/*.sql # 壓縮網站資料 tar zcfP $BACKUP_DIR/$WebName $WEB_DATA --exclude=wp-content/akeebabackup --exclude=wp-content/cache #上傳到Dropbox空間並刪除7天前的資料 $DROPBOX_UPLOADER -f /root/.dropbox_uploader upload "$DBName" / $DROPBOX_UPLOADER -f /root/.dropbox_uploader upload "$WebName" / $DROPBOX_UPLOADER -f /root/.dropbox_uploader delete "$OldDB" / $DROPBOX_UPLOADER -f /root/.dropbox_uploader delete "$OldWeb" / # ring a bell printf '\007' EOF chmod +x /root/MyUploader520be.sh |
這支腳本做了什麼?我們用「搬家」來比喻一次:
- ❶ 先準備一個乾淨的暫存區(BACKUP_DIR)
- ❷ 把 7 天前的舊資料庫備份丟掉,把 1 天前的舊網站備份丟掉(節省空間)
- ❸ 自動修復並最佳化資料庫(搬家前先把家具擦乾淨)
- ❹ 把每個資料庫各自匯出成 .sql 檔
- ❺ 壓縮成一個大 tar.gz,並刪除臨時的 .sql
- ❻ 壓縮整個網站資料夾(排除快取與 Akeeba 備份)
- ❼ 把兩個壓縮檔上傳到 Dropbox
- ❽ 刪除 Dropbox 裡 7 天前的舊檔
- ❾ 叮一聲通知你完成(printf ‘\007’)
寫完後記得執行一次測試,確認沒問題再丟進排程。
設定每天自動執行(讓搬家工人準時上班)⏰
測試沒問題後,就把腳本丟進 crontab,讓系統每天固定時間自動跑。
以下指令會把「每天早上 6 點執行」的排程加進去,並把執行紀錄寫進
|
1 |
/var/log/backup.log |
:
|
1 2 3 |
# 定時每天6點自動執行備份 crontab -l | { cat; echo "0 6 * * * /root/MyUploader520be.sh 2>&1 >> /var/log/backup.log"; } | crontab - crontab -l |
最後一行
|
1 |
crontab -l |
是用來確認排程有沒有成功寫入。如果看到類似
|
1 |
0 6 * * * /root/MyUploader520be.sh ... |
就代表成功了。
💡 你知道嗎?很多人設完排程就忘記,結果半年後網站出事才發現備份其實一直有在跑。這就是自動化的最大價值——你不用記得,它也不會忘記。
參數怎麼填?最容易搞錯的地方一次講透 ✍️
腳本最上面「你要修改的地方」是成敗關鍵。這裡用表格直接對照:
| 參數名稱 | 你要填什麼 | 注意事項 |
|---|---|---|
| DROPBOX_UPLOADER | Dropbox Uploader 的完整路徑 | 通常是 /opt/dropbox_uploader.sh |
| BACKUP_DIR | 本機暫存備份的位置 | 建議用 /opt/backup |
| WEB_DATA | 要備份的網站路徑 | 可空格分隔多個路徑 |
| MYSQL_USER / MYSQL_PASS | MySQL 帳號密碼 | 建議用有足夠權限的帳號 |
| MYSQL_PATH 等 | 指令路徑 | 大多數主機不用改 |
常見問題與除錯小技巧 🛠️
- ❶ 上傳失敗? 先執行
確認 Token 是否正確,再檢查網路有沒有被防火牆擋住。1/opt/dropbox_uploader.sh info
- ❷ 權限問題? 確認腳本有
,以及1chmod +x檔案權限不要設太開放。1~/.dropbox_uploader
- ❸ 空間不夠? 用
查看,必要時手動刪除舊檔或升級 Dropbox 方案。1/opt/dropbox_uploader.sh space
- ❹ 想改保留天數? 把腳本裡的
改成你想要的天數即可。1-7day
- ❺ 多個網站怎麼備份? 在
用空格分隔多個路徑,腳本會一次打包。1WEB_DATA
寫在最後:不只是本機備份,雲端備份是現代網站的標準配備 ☁️
以前我們只能把備份丟在同一台主機或 FTP,風險其實還是很高。現在有了 Dropbox Uploader,你可以把備份真正「搬離」主機,放到另一個完全獨立的雲端空間。就算主機商倒閉、硬碟損壞、被駭客清空,你都還有最後一道防線。
這套流程我自己用了很久,從早期的共享主機一路用到現在的 VPS,中間經歷過好幾次突發狀況,都是靠它把資料救回來。現在把完整教學公開,希望也能幫到需要的人。
如果你有改得更好的版本,或是遇到奇怪的錯誤,歡迎留言一起討論。也記得去下載範例檔案,省得自己從頭打字。
備份做一次,安心睡十年。
讓 Dropbox 當你的雲端保險庫吧!



