每一個可以努力的日子,都是一份厚禮。
自動備份網站並同步到 Dropbox
之前寫過一篇博客,記錄了 定時自動備份網站和數據庫 的腳本,不過只是將 VPS 上的數據打包保存在了本機的一個目錄下,要知道真正的容災備份需要至少在 3 個不同的物理節點上都有一份拷貝的。Email 發送備份文件在數據超多的情況下不太實際,而出於成本考慮我不想為了一個 VPS 又購買另一個來用作 FTP。不禁想到 DropBox,它無疑是很好的選擇——基於 Amazon S3 的雲存儲保證了可靠性,免費的容量已經足夠用,也不必擔心數據被審查。
一、設置 Dropbox
Dropbox 提供了豐富的 API,使得我們不必使用官方龐大的客戶端,而用一些簡單輕量的腳本即可直接上傳文件。
Dropbox-Uploader 就是這樣一個第三方的腳本,並且它已經開源在了 Github。我們將此腳本下載到 VPS 中,即可使用。
$ wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh $ chmod +x dropbox_uploader.sh $ ./dropbox_uploader.sh |
運行腳本,根據提示設置自己的 Dropbox 應用 API,然後按照步驟設置,就可以使用其命令上傳和下載文件了。
二、同步備份腳本
腳本根據自己的 VPS 配置進行一些修改。
#!/bin/bash # 一些配置 DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox 目錄,根目錄 / 是你已經創建的 app 目錄 MYSQL_USER="root" MYSQL_PASS="password" MYSQL_DB=('wordpress' 'project2') BACK_DATA=/root/backup-data # 備份文件保存在本地的目錄 DATA=/var/www # 需要備份的網站文件 # 定義備份文件名 DataBakName=Database_$(date +"%Y-%m-%d").tar.gz WebBakName=Web_$(date +%Y-%m-%d).tar.gz OldData=Database_$(date -d -6day +"%Y-%m-%d").tar.gz OldWeb=Web_$(date -d -6day +"%Y-%m-%d").tar.gz # Dropbox 里 30 天以上的舊數據可以清除 Old_DROPBOX_DIR=/$(date -d -30day +%Y-%m-%d) # 清理本地保存了 6 天的備份 echo -ne "Delete local data of 6 days old..." rm -rf $BACK_DATA/$OldData $BACK_DATA/$OldWeb echo -e "Done" cd $BACK_DATA # 導出 MySQL 數據庫,並壓縮 echo -ne "Dump mysql..." for db in ${MYSQL_DB[@]}; do (/usr/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} > ${db}.sql) done tar zcf $BACK_DATA/$DataBakName *.sql rm -rf $BACK_DATA/*.sql echo -e "Done" # 備份網站文件 echo -ne "Backup web files..." cd $DATA tar zcf $BACK_DATA/$WebBakName * echo -e "Done" cd $BACK_DATA # 開始上傳到 Dropbox echo -e "Start uploading..." ./dropbox_uploader.sh upload $BACK_DATA/$DataBakName $DROPBOX_DIR/$DataBakName ./dropbox_uploader.sh upload $BACK_DATA/$WebBakName $DROPBOX_DIR/$WebBakName # 清理 Dropbox 里 30 天前的舊數據 ./dropbox_uploader.sh delete $Old_DROPBOX_DIR/ echo -e "Thank you! All done." |
然後使用 crontab,讓此腳本每幾天定時自動運行,網站的所有數據就會安全地備份到 Dropbox 了。其他注意事項,可以參考我之前的一篇 定時自動備份網站和數據庫。
– EOF –
這篇文章由lovelucy於2013-09-09 20:00發表在Linux。你可以訂閱RSS 2.0 也可以發表評論或引用到你的網站。除特殊說明外文章均為本人原創,並遵從署名-非商業性使用-相同方式共享創作協議,轉載或使用請註明作者和來源,尊重知識分享。 |
批評不自由
則讚美無意義
Mozilla Firefox 27.0 Windows 7 大約10年前
我是美國鱷魚的虛擬主機,雖然不是VPS,但也開放了SSH,用putty可以上,用你這個辦法也可以吧?
Google Chrome 33.0.1750.152 Linux 大約10年前
需要有設置 crond 定時任務的權限
Mozilla Firefox 25.0 Windows 7 大約10年前
虛擬主機的飄過。。。
Google Chrome 29.0.1547.66 Windows XP 大約11年前
非常實用~
Google Chrome 29.0.1547.66 Windows 7 大約11年前
我比較暴力……直接在vps上跑一個dropbox客戶端。
Google Chrome 29.0.1547.66 Windows 7 大約11年前
Dropbox 客戶端常駐內存,會定時和服務器同步。資源能省一點是一點……
Google Chrome 29.0.1547.66 Windows 7 大約11年前
128M 的 vps 表示跑 dropbox 的客戶端直接爆內存… 還是這樣定時備份好
Google Chrome 29.0.1547.66 Windows 7 大約11年前
有幾個小疑問:
1. 既然所有的 .sql 最後都會被打包成一個 .tar.gz , 為什麼還要把 sql 打成 .sql.gz ? 感覺有點冗餘操作
2. $DomainName 沒定義, 應該是你公布腳本的時候刪漏了?
Google Chrome 29.0.1547.66 Windows 7 大約11年前
1. 的確是,已經修改
2. 這都被你發現了。。已修正
Google Chrome 29.0.1547.66 Windows 7 大約11年前
發現是因為我也在用…
另外, 刪除若干天前的文件, 可以這麼玩:
find “$BACK_DATA/” -mtime +7 -exec rm -f {} \;