如果你的空間是linux系統,空間比較大的話,擁有SSH許可權,那麼恭喜你,你可以用這段指令碼來實現自動備份整個wp到空間上或者Dropbox上了。
指令碼doBackWebSite.sh利用linux的crontab功能實現自動定時備份功能,並自動刪除到期的備份檔案,節約空間,程式預設為刪除備份前三天的指令碼,當然你可以在指令碼中自動制定的;-) ,下面介紹指令碼使用過程。
1. 指令碼內容如下
doBackWebSite.sh
#!/bin/bash#*********************************************************## File : doBackWebSite.sh ## Perpose: 自動備份並刪除指定天數的前的備份檔案 ## Atuthor: 吳澤君 ## WebSite: www.fly3q.com ## Date : 2010-06-25 ## Modify : 2010-06-29 增加Dropbox備份支援 ##*********************************************************##*********************************************************## Local Variable ##*********************************************************##空間的更目錄HOME_DIR="~"#網站內容放置的檔案WS_DIR="fly3q.com"#放置備份的檔案夾BK_DIR="back"#Dropbox放置備份的檔案夾Dropbox_BK_DIR="Dropbox/WPBack"#Dropbox安裝目錄Dropbox_BK_DIR=".dropbox-dist"#網站備份名字BACK_FILE_NAME=$WS_DIR`date +%Y%m%d`".tgz" #*********************************************************## function : auto_back_files ## Input : $1 is_back_to_dropbox - 是否備份到dropbox ## - true/false ##*********************************************************#function auto_back_files(){cd ~if [ ! -d $BK_DIR ];thenmkdir -p $BK_DIRficd $WS_DIRtar -czf $BACK_FILE_NAME *mv $BACK_FILE_NAME ../$BK_DIRecho "[OK] BACK UP $BACK_FILE_NAME"if [ -n $1 -a "$1" = "true" ];thenmove_back_to_dropboxfi}#*********************************************************## function : move_back_to_dropbox ## Input : 將網站備份到Dropbox ##*********************************************************#function move_back_to_dropbox(){ if [ -z ` ps auxawk -F" " '{print $11}'grep '^/home/[^]*[dropbox]'` ];thencd ~/$BK_DIR/$Dropbox_BK_DIRdropboxd & fi if [ -d Dropbox ];thencd Dropboxif [ ! -d WPBack ];thenmkdir WPBackficd ~/$Dropbox_BK_DIRcp ~/$BK_DIR/$BACK_FILE_NAME .echo "[OK] $BACK_FILE_NAME had benn back to Dropbox." else echo "[FAIL] You had not installed Dropbox,please first install Dropbox." fi}#*********************************************************## function : auto_delete_last_back_files ## Input : $1 offset_day - 自動刪除指定前幾天的備份檔案 ## - 預設刪除前3天的備份檔案 ##*********************************************************#function auto_delete_last_back_files(){ local year=`date '+%Y'` local month_of_year=`date '+%m'sed s/^0//` local day_of_month=`date '+%d'sed s/^0//` local offest=3 local index=1 local month=(0) local day=(0) while [ $index -le 12 ]; domonth[$index]="$index"let index+=1 done index=1 while [ $index -le 31 ]; do day[$index]=$indexlet index+=1 done if [ -n "$1" ];thenoffest=$1 fi ret_day= let ret_day=$day_of_month-$offest if [ $ret_day -le 9 ];thenif [ $ret_day -le 0 ];thenlet ret_month=$month_of_year-$ret_day/31-1if [ $ret_month -le 9 ];thenret_month="0"$ret_monthfilet index=31+$ret_day%31ret_day=${day[$index]}if [ $ret_day -le 9 ];thenret_day="0"$ret_dayfielseret_day="0"$ret_dayfi fi if [ -n "$ret_month" ];thenret_month=`echo $ret_monthsed s/^0//`ret_month="0"$ret_month elseret_month="0"$month_of_year fi ret_year=$year ret_date=$ret_year$ret_month$ret_day ret_bck_file_name=$WS_DIR$ret_date".tgz" cd ~ cd $BK_DIR if [ -f $ret_bck_file_name ];then#rm -fr $ret_bck_file_nameecho "[OK] DELETE $ret_bck_file_name" else echo "[FAIL] $ret_bck_file_name NOT EXIST!!" fi cd ~ if [ -d $Dropbox_BK_DIR ];thencd $Dropbox_BK_DIRif [ -f $ret_bck_file_name ];then#rm -fr $ret_bck_file_nameecho "[OK] DELETE Dropbox BackFile->$ret_bck_file_name."elseecho "[FAIL] Dropbox BackFile->$ret_bck_file_name NOT EXIST."fi fi}auto_back_files trueauto_delete_last_back_files
2. SSH 登陸空間
建一個目錄back的目錄,放這個指令碼到這個back目錄裡面。
3. 配置crontab
輸入crontab -e,來配置linux自動啟動並執行情況,具體的參數配置可以參考本博另外一篇關於crontab文章。
例如我的配置如下:
22 22 * * 1-7 cd /home/user1/back/;bash doBackWebSite.sh
表示每天22:22分執行doBackWebSite.sh指令碼完成自動備份的功能。
4. 安裝Dropbox
Dropbox是一個能夠線上隱藏檔並提供版本版本的管理的雲端儲存體服務。具體請參考http://wiki.dropbox.com。
安裝步驟參考http://wiki.dropbox.com/TipsAndTricks/TextBasedLinuxInstall
$ cd ~
$ cd wget -O dropbox.tar.gz http://www.dropbox.com/download/?plat=lnx.x86
$ tar -zxof dropbox.tar.gz
$ mv .dropbox-dist ~
$ cd ~
$ ~/.dropbox-dist/dropboxd &
此時會提示一串URL,要求你在瀏覽器裡面輸入這串URL將這台虛擬機器主機連到Dropbox上,登陸之後你就可以看到提示這台機子已經連到了dropbox上了。
註:這邊第一次需要這樣配置,以後系統會儲存登陸狀態就不需要去手動輸入URL了,這也是這個指令碼能夠實現自動備份到上面的關鍵。
通過ps auxgrep dropbox查看dropbox是否已經運行起來了,有的話恭喜你dropbox配置成功了。
5. 完成配置
第一次請手動運行doBackWebSite.sh,已完成連結虛擬機器主機到dropbox。
這樣每天就會自動地把你的網站進行備份了,通過ls -oh 你可以查看備份的情況。同時如果配置了接收郵箱的話,系統crontab也會自動的發出一封執行結果的郵件
Cron cd /home/user1/back/;bash doBackWebSite.sh
[OK] BACK UP fly3q.com20100629.tgz
[OK] fly3q.com20100629.tgz had benn back to Dropbox.
[OK] DELETE fly3q.com20100626.tgz
[FAIL] Dropbox BackFile->fly3q.com20100626.tgz NOT EXIST.
這邊我還沒有備份fly3q.com20100626.tgz到dropbox上所以失敗了,嘿嘿。
同時查看dropbox的Event裡面可以看到
6. 總結
這個指令碼完全是屬於硬性的打包備份,備份檔案還是放在空間裡面,也可能說還是不安全,那麼當然你可以在你的機子上來完成自動備份遠端主機檔案,然後ftp下到本地來,這樣就不用擔心空間出現問題不能及時恢複了。這個實現也很簡單的,你的機子執行自動運行備份,自動登陸ssh,一切都搞定,如果有需要的話,我可以分享出來。
但是考考慮到我們網速的問題,這個想法也就放棄了,但是我想到一個更好的辦法,放到微軟25G的skydrive上去,但是它不提供相應的api的呀,只是有一個非官方的.netapi,要是有更簡單的jsapi就好了,如果大家有什麼好的點子歡迎討論。
現在受到月光部落格一篇文章的啟發,我把備份放到了dropbox上,呵呵,也算是實現了雲端儲存吧。隨便提下國外的主機上傳到dropbox速度就是快的呀,我打包檔案60M基本上就是一分鐘左右,就搞定了,羨慕這樣的網速。