個人VPS數據備份之異地備份.我有DropBox

本文與我個人的獨立博客http://blog.coocla.org/280.html 同步發佈,歡迎各位訪問我的小站!

現在個人博客越來、個人網站越來越多,身邊大部分人都扮演着小小站長的角色,每個人手下都有着不同配置的VPS,作爲一個Linux運維人員,擁有一個VPS的小小站長,細心經營搗鼓着自己的服務器/VPS,努力而細心的“經營”着自己的這份工作與愛好。本着事事無常的態度,不可再生的數據顯的尤爲重要,“備份”這個名詞,總會讓人的內心得到一絲安全感。

備份是門大學問,根據備份方式可分邏輯備份和物理備份。
根據備份時刻可分冷備份和熱備份
根據存儲介質可分本地備份和異地備份,而異地備份具有容災性

對於個人VPS的數據備份,如果只將網頁數據和數據庫數據打包保存在本機的一個目錄下,並不能完全達到數據備份的意義。而異地備份在於備份的數據會被存放在至少3個物理節點上,已達到異地容災性備份,而鑑於成本考慮,不可能在買一個VPS進行異地容災備份。但這並不代表對於VPS用戶做到異地備份就沒有其他備份方案了。

Dropbox,一個提供同步本地文件的網絡存儲在線應用,它提供了豐富的API,我們可以通過API將自己VPS備份的數據立刻同步到DropBox中,而DropBox提供的免費空間最夠大部分站長的備份空間需求。我們利用DropBox這樣的第三方腳本,來實現同步與刪除。

配置自己的Dropbox,創建一個app

1.下載DropBox腳本,到自己的VPS上

# wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh
# chmod +x dropbox_uploader.sh
# ./dropbox_uploader.sh

運行該腳本,根據以下提示進行DropBox的設置

This is the first time you run this script.
1) Open the following URL in your Browser, and log in using your account: https://www2.dropbox.com/developers/apps
在瀏覽器中打開,https://www2.dropbox.com/developers/apps
2) Click on "Create App", then select "Dropbox API app"
點擊"Create App"按鈕,然後選擇"Dropbox API app"
3) Select "Files and datastores"
選擇"Files and datastores"選項
4) Now go on with the configuration, choosing the app permissions and access restrictions to your DropBox folder
現在去進行配置,選擇這個app對你整個Dropbox文件夾的訪問權限
5) Enter the "App Name" that you prefer (e.g. MyUploader113012919723169)
輸入一個你喜歡的App名稱
Now, click on the "Create app" button.
When your new App is successfully created, please type the
App Key, App Secret and the Permission type shown in the confirmation page:
# App key: xxxxxxxxxx
# App secret: xxxxxxxxx
# Permission type, App folder or Full Dropbox [a/f]: a
> App key is xxxxxxxxxx, App secret is xxxxxxxxxx and Access level is App Folder, it's ok? [y/n]y
> Token request... OK
Please open the following URL in your Browser, and allow Dropbox Uploader
to access your DropBox folder:
--> https://www2.dropbox.com/1/oauth/authorize?oauth_token=iP0TqrmjjKcAUfwW
Press enter when done...
> Access Token request... OK
Setup completed!

1

2

3

到此爲止,關於Dropbox的設置就結束了,接下來按照自己的情況編寫備份同步腳本。

同步備份腳本

#!/bin/bash
#
# when:2013/10/15
# who:http://blog.coocla.org
TODAY=`date -I`                                         # 獲取當前日期
BACKUP_LOG=/data/backup/backup_${TODAY}.log             # 備份日誌
Expire=`date -d -7day +"%Y-%m-%d"`                      # 獲取7天前的日期
MYSQL_USER="root"                                       # Mysql用戶
MYSQL_PASS="rootpass"                                   # Mysql密碼
MYSQL_DB=('blog' 'yunxiaojia')                          # 要備份的數據庫名
BACK_DIR=/data/backup                                   # 備份存放的目錄
Dropbox=/${TODAY}                                       # Dropbox上創建的app存放目錄,這裏的根(/)是指app的根目錄
WEB_DATA=/data/www/wwwroot                              # 網頁文件目錄
#Create Today BackupDirectory
if [ ! -d $BACK_DIR/$TODAY ];then
    mkdir $BACK_DIR/$TODAY
fi
#Backup Mysql DB
echo "###############################################################" > $BACKUP_LOG
echo "Backup Mysql DB." >> $BACKUP_LOG
echo "Start Time : `date +%F" "%H:%M:%S`" >> $BACKUP_LOG
for db in ${MYSQL_DB[@]};do
    /usr/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS --skip-opt --add-drop-table --create-options -q -e --set-charset --routines --single-transaction --master-data=2 $db > ${TODAY}_${db}_full_back.sql --log-error=$BACKUP_LOG
done
tar zcf ${TODAY}_db_full_back.tar.gz *.sql
rm -f *.sql
mv ${TODAY}_db_full_back.tar.gz ${BACK_DIR}/${TODAY}/
echo "Stop Time : `date +%F" "%H:%M:%S`" >> $BACKUP_LOG
#Backup Website Data
echo "###############################################################" >> $BACKUP_LOG
echo "Backup Website Data." >> $BACKUP_LOG
echo "Start Time : `date +%F" "%H:%M:%S`" >> $BACKUP_LOG
cd $WEB_DATA
tar zcf ${TODAY}_web_full_back.tar.gz ./* && cd -
mv ${WEB_DATA}/${TODAY}_web_full_back.tar.gz ${BACK_DIR}/${TODAY}/
echo "Stop Time : `date +%F" "%H:%M:%S`" >> $BACKUP_LOG
#Upload Dropbox
echo "###############################################################" >> $BACKUP_LOG
echo "Upload backup." >> $BACKUP_LOG
echo "Start Time : `date +%F" "%H:%M:%S`" >> $BACKUP_LOG
/usr/local/sbin/dropbox_uploader.sh upload ${BACK_DIR}/${TODAY}/${TODAY}_db_full_back.tar.gz ${Dropbox}/${TODAY}_db_full_back.tar.gz >> $BACKUP_LOG
/usr/local/sbin/dropbox_uploader.sh upload ${BACK_DIR}/${TODAY}/${TODAY}_web_full_back.tar.gz ${Dropbox}/${TODAY}_web_full_back.tar.gz >> $BACKUP_LOG
echo "Stop Time : `date +%F" "%H:%M:%S`" >> $BACKUP_LOG
#Delete old data
echo "###############################################################" >> $BACKUP_LOG
echo "Delete expire data." >> $BACKUP_LOG
echo "Start Time : `date +%F" "%H:%M:%S`" >> $BACKUP_LOG
find ${BACK_DIR} -mtime +3 | xargs rm -rf
/usr/local/sbin/dropbox_uploader.sh delete /$Expire/ >> $BACKUP_LOG
echo "Stop Time : `date +%F" "%H:%M:%S`" >> $BACKUP_LOG

查看日誌信息如下:

###############################################################
Backup Mysql DB.
Start Time : 2013-10-15 22:12:11
Stop Time : 2013-10-15 22:12:21
###############################################################
Backup Website Data.
Start Time : 2013-10-15 22:12:21
Stop Time : 2013-10-15 22:12:27
###############################################################
Upload backup.
Start Time : 2013-10-15 22:12:27
 > Uploading "/data/backup/2013-10-15/2013-10-15_db_full_back.tar.gz" to "/2013-10-15/2013-10-15_db_full_back.tar.gz"... DONE
 > Uploading "/data/backup/2013-10-15/2013-10-15_web_full_back.tar.gz" to "/2013-10-15/2013-10-15_web_full_back.tar.gz"... DONE
Stop Time : 2013-10-15 22:12:42
###############################################################
Delete expire data.
Start Time : 2013-10-15 22:12:42
 > Deleting "/2013-10-08"... FAILED
Stop Time : 2013-10-15 22:12:42

然後將該腳本和dropbox_uploader.sh腳本放置於/usr/local/sbin或同一目錄下,然後定義crontab計劃任務:


根據日誌中開始時間和結束時間,小夥伴們可以定義crontab開始的時間,由於我的內容比較少,在1分鐘只能即可完成,我的crontab設置如下:

59 23 * * * /bin/sh /usr/local/sbin/backup.sh > /dev/null 2>&1

小夥伴們也可以下載DropBox客戶端安裝在自己的PC上,然後進行同步,手動運行以上腳本或者等待計劃任務執行後,待自動同步後,即可在windows下查看的到剛纔同步上去的備份文件啦!

好了,小夥伴們快去創建自己的異地備份策略吧~


附件:同步備份腳本。。。。。 backup.sh



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章