自動備份網(wǎng)站并同步到 Dropbox
之前寫過一篇博客,記錄了 定時自動備份網(wǎng)站和數(shù)據(jù)庫 的腳本,不過只是將 VPS 上的數(shù)據(jù)打包保存在了本機的一個目錄下,要知道真正的容災(zāi)備份需要至少在 3 個不同的物理節(jié)點上都有一份拷貝的。Email 發(fā)送備份文件在數(shù)據(jù)超多的情況下不太實際,而出于成本考慮我不想為了一個 VPS 又購買另一個來用作 FTP。不禁想到 DropBox,它無疑是很好的選擇——基于 Amazon S3 的云存儲保證了可靠性,免費的容量已經(jīng)足夠用,也不必擔心數(shù)據(jù)被審查。
一、設(shè)置 Dropbox
Dropbox 提供了豐富的 API,使得我們不必使用官方龐大的客戶端,而用一些簡單輕量的腳本即可直接上傳文件。
Dropbox-Uploader 就是這樣一個第三方的腳本,并且它已經(jīng)開源在了 Github。我們將此腳本下載到 VPS 中,即可使用。
- $ wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh
- $ chmod +x dropbox_uploader.sh
- $ ./dropbox_uploader.sh
運行腳本,根據(jù)提示設(shè)置自己的 Dropbox 應(yīng)用 API,然后按照步驟設(shè)置,就可以使用其命令上傳和下載文件了。
二、同步備份腳本
腳本根據(jù)自己的 VPS 配置進行一些修改。
- #!/bin/bash
- # 一些配置
- DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox 目錄,根目錄 / 是你已經(jīng)創(chuàng)建的 app 目錄
- MYSQL_USER="root"
- MYSQL_PASS="password"
- MYSQL_DB=('wordpress' 'project2')
- BACK_DATA=/root/backup-data # 備份文件保存在本地的目錄
- DATA=/var/www # 需要備份的網(wǎng)站文件
- # 定義備份文件名
- 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 天以上的舊數(shù)據(jù)可以清除
- 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
- # 導(dǎo)出 MySQL 數(shù)據(jù)庫,并壓縮
- echo -ne "Dump mysql..."
- for db in ${MYSQL_DB[@]}; do
- (/usr/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db}.sql)
- done
- tar zcf $BACK_DATA/$DataBakName *.sql
- rm -rf $BACK_DATA/*.sql
- echo -e "Done"
- # 備份網(wǎng)站文件
- 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 天前的舊數(shù)據(jù)
- ./dropbox_uploader.sh delete $Old_DROPBOX_DIR/
- echo -e "Thank you! All done."
然后使用 crontab,讓此腳本每幾天定時自動運行,網(wǎng)站的所有數(shù)據(jù)就會安全地備份到 Dropbox 了。其他注意事項,可以參考我之前的一篇 定時自動備份網(wǎng)站和數(shù)據(jù)庫。