Linux(Centos)全自動異地備份數據(WEB+Mysql)

jopen 11年前發布 | 60K 次閱讀 備份工具 CentOS

文章開始之前,先問下各位站長一個問題:什么東西對于站長是十分重要的?其實對于站長而言,很多東西都是很重要的。但我們現在排除外在因素,把范圍縮小到網站系統本身,哪些是非常重要的呢?網站數據就是其中之一了。

網站數據包括程序文件本身、網站運行過程中不斷產生的附件數據(圖片、文檔、視頻等)以及數據庫文件,三大塊總括為網站數據。

以 自己為例,在這兩年多的站長經歷來看,最讓我痛苦的就是某一天起床,一直苦心經營的網站打不開了,檢查過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
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!