Linux(Centos)全自動異地備份數據(WEB+Mysql)
文章開始之前,先問下各位站長一個問題:什么東西對于站長是十分重要的?其實對于站長而言,很多東西都是很重要的。但我們現在排除外在因素,把范圍縮小到網站系統本身,哪些是非常重要的呢?網站數據就是其中之一了。
網站數據包括程序文件本身、網站運行過程中不斷產生的附件數據(圖片、文檔、視頻等)以及數據庫文件,三大塊總括為網站數據。
以 自己為例,在這兩年多的站長經歷來看,最讓我痛苦的就是某一天起床,一直苦心經營的網站打不開了,檢查過DNS也正常,最后詢問空間運營商發生什么事了, 獲知的結果系:服務器硬盤損壞,所有數據無法恢復(在這備注下:一般小站長買的機器或者空間都很低配置的,所以別想有什么數據備份服務,要就加錢買),結 果就是一陣陣的失落。如果網站剛上線運行不久就發生這樣的事或者還不會那么心痛,從頭再來也不難。假如是一個運行若干年的網站,突然發生這么一次意外就可 以說是重重一擊。
剛成為站長的前幾個月,我對數據備份這個事情壓根沒考慮過,直到有一天在群里看到有位群友痛心的經歷——網站徹底崩潰,數據全沒!!那是經營了3年多的一個老站,就么倒下了,真是聞者傷心聽者落淚(有點夸張了)。
我 看到了這樣活生生的樣板,不做數據備份的后果很嚴重。所以我現在總結出一個經驗:如果真要用心做一個網站,就一定要做好數據備份工作,而且最好能異地備 份,有些朋友以為在機器本地做了備份就樂了,放心了,那就大錯。對于備份數據,又要面臨一個實際的問題:每次都自己上服務器把相關的數據打包,然后再用 FTP下載回來嗎?這樣時間長了就會累,所以今天就以Linux(Centos 5.5)環境講講如何實現全自動遠程(異地)對全站數據進行備份。
要實現自動遠程備份功能需要的關軟件有:服務器(本地環境)要安裝lftp,遠程端要開啟FTP服務,對登錄的目錄有讀寫權限,具備以上2個條件即可。
如果機器上沒有安裝lftp這個工具,可以通過以下命令完成:
#yum install lftp
假設把相關的腳本文件存放在/apps/script目錄下
#vi /apps/script/autobackup.sh //輸入以下內容
#!/bin/bash
#author: www.5ishare.com
echo "backup job start"
#設置要備份的網站目錄,即是網站的根目錄
file=/apps/wwwdata
#設置本地備份目錄,用于存放打包后的文件
backpath=/apps/bkdata/
dbuser=數據庫用戶名
#數據密碼,要記得用單引號將把整個密碼引起來,如果密碼中有單引號就用雙引號,嘿嘿
dbpwd='數據庫密碼'
dbname=數據庫名稱
domain=遠程端的域名或者IP地址
user=FTP用戶名
userpwd='FTP用戶密碼'
bkdate=$(date +%Y%m%d)
sqlfile_sql=${dbname}_${bkdate}.sql
sqlfile_gz=${dbname}_${bkdate}.tar.gz
sqlfp=${backpath}${bkdate}/$sqlfile_sql
if [ -e $backpath${bkdate} ]
then
echo $backpath is exists.
else
mkdir -p $backpath${bkdate}
fi
#執行數據庫備份,/apps/mysql/bin/mysqldump修改為你實際環境的路徑
/apps/mysql/bin/mysqldump -u $dbuser -p$dbpwd $dbname > ${sqlfp}
#對備份之后的數據庫文件壓縮,或者在數據庫備份時通過加入參數直接進行壓縮
tar zcf $backpath${bkdate}/$sqlfile_gz -C ${backpath}${bkdate} ${sqlfile_sql}
#刪除未壓縮SQL的文件
rm -f ${sqlfp}
#生成的文件名格式:web_網站目錄名_20130419.tar.gz
fn=web_${file##*/}_${bkdate}.tar.gz
tar zcf $backpath${bkdate}/$fn -C ${file%/*} ${file##*/}
#以下操作為FTP自動連接并把本地文件上傳到異地服務器上
/usr/bin/lftp ${domain} << END
user ${user} ${userpwd}
lcd ${backpath}
mirror -R ${bkdate}
exit
END
echo "backup job done"
------------分隔線--------------
保存退出之后,為該腳本增加執行權限
#chmod +x /apps/script/autobackup.sh
#crontab –e //添加定時任務,根據具體需求設定備份間隔
#0 4 1,16 * * /apps/script/autobackup.sh
我設定為每月的1日,16日的零辰4點鐘執行備份任務。最好不要在大白天做這些操作,因為會讓整個系統明顯變慢的。
經過以上配置,站長們就不用再愁數據備份的煩惱了,可以說是一勞永逸。以上僅為個人實際應用寫,跟其各自的需求可能不大一樣,但本質不變,只要稍作修改即可,如果有其它疑問歡迎大家留言交流學習。
本文地址: http://www.5ishare.com/tech/system/368842.shtml