今天看下公司的數據備份,天天更新的數據量很是大,備份爲異地備份,也就是說,全部的數據要傳到另一臺服務器.因此研究出如下備份策略及備份腳本,但願對讀者有些幫助.如下爲實現方式:
軟件及策略說明:
軟件:軟件使用rsync
策略:網站程序爲增量備份,第一次總體同步後,後期備份時,將會比對每個文件,將有差別的文件進行備份.從而不會丟下任何一個文件.rsync比對文件效率很是高,並且邊比對邊傳輸文件.
具體實現以下:
真實服務器A :192.168.0.2 (實際操做換上真實服務器IP )
備份服務器B :192.168.0.3 (實際操做換上真實服務器IP)
一,如下爲在真實服務器上A 上的操做
真實服務器A 爲nginx +php-cgi+mysql 模式
nginx 安裝目錄爲/usr/local/nginx/ 全部的配置文件爲一個虛擬主機一個配置文件,並在 /usr/local/nginx/conf/vhost/下.
php安裝目錄爲/usr/local/php
mysql 安裝路徑爲/usr/local/mysql
數據庫文件在/data/mysql下
全部的數據所有儲存在/data下
目錄解釋:
/data/db :爲每日將全部數據庫文件打包存放的地方,打包文件格式爲:服務器名.日期.tar
/data/dbcache : 爲備份數據庫文件時的臨時目錄
/data/nginxconf:爲服務器全部nginx配置文件備份存放位置,由於天天架站,刪除站比較多,因此這個也須要備份
/data/script: 爲經常使用腳本存放位置
/data/web : 爲全部網站程序所放置位置
二.
(1) :在script目錄下建立dbback.sh腳本文件
腳本內容爲:
#! /bin/bash
ls /data0/web/html/web/ > /data0/script/yuming
for i in `cat /data0/script/yuming`
do
cat /data0/web/html/web/$i/htdocs/app/etc/local.xml | grep dbname | awk -F ']]' '{print $1}' | awk -F '[' '{print $3}' >>/data0/script/dbname
done
for db in `cat /data0/script/dbname`
do
/usr/local/mysql/bin/mysqldump -p'E2Vj2LQVvS.rG76U' $db > /data/dbcache/$db.sql
done
rm -rf /data0/script/yuming
rm -rf /data0/script/dbname
cd /data/dbcache/
tar -cf 146.0.74.8.`date +"%Y%m%d"`.tar *
find /data/db -mtime +7 -exec rm -rf {} \;
mv *.tar /data/db/
rm -rf /data/dbcache/*
/usr/bin/rsync -auv --progress --delete --password-file=/etc/rsyncd.secrets ./ root@192.168.0.3::backup
下面進行解釋:
#! /bin/bash
ls /data/web/ > /data/script/yuming //將站域名導入yuming
for i in `cat /data/script/yuming` //把yuming定義爲一個變量
do
cat /data/web/$i/htdocs/app/etc/local.xml | grep dbname | awk -F ']]' '{print $1}' | awk -F '[' '{print $3}' >>/data/script/dbname //提取數據庫名並打入dbname(這個要視你網站的程序而定這裏是magento程序)
done
for db in `cat /data/script/dbname` //把dbname定義爲一個變量
do
/usr/local/mysql/bin/mysqldump -p'密碼' $db > /data/dbcache/$db.sql //用mysqldump導出數據庫
done
rm -rf /data/script/yuming //刪除yuming
rm -rf /data/script/dbname //刪除dbname
cd /data/dbcache/
tar -cf 服務器IP.`date +"%Y%m%d"`.tar * //打包全部拷貝過來的數據庫文件
find /data/db -mtime +7 -exec rm -rf {} \; //刪除/data/db 下7天之前的數據庫打包文件
mv *.tar /data/db/ //將剛剛打包好的數據庫文件移到/data/db
rm -rf /data/dbcache/* //刪除複製過來的庫
/usr/bin/rsync -auv --progress --delete --password-file=/etc/rsyncd.secrets ./ root@備份服務器::備份服務器上的對應模塊>/dev/null 2>&1 //將/data下的全部數據利用rsync 工具傳輸到備份服務器 本案例爲192.168.0.3上的對應模塊
注:備份服務器上的模塊將在下面進行講解備份服務器配置時進行解釋
(2):制定計劃任務.讓此腳本天天定時運行一次
例如:
00 00 * * * sh /data/script/dbback.sh
三,在備份服務器上添加rsync備份模板
在/etc/下建立rsyncd.conf配置文件,文件自己沒有,需建立
vim /etc/rsyncd.conf
輸入如下內容
uid=root
gid=root
max connections=36000
use chroot=0
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
[模塊名] #此模塊名爲以上兩個腳本中使用的名
path=/backup #備份數據存放目錄
comment = mydata backup #備註說明
ignore errors = yes
read only=no
hosts allow = 192.168.0.2 #只容許此IP進行備份
hosts deny =*
注: 模塊名爲以上兩個腳本中使用的模塊名,例如以上模塊名爲 [backup]
以下:
uid=root
gid=root
max connections=36000
use chroot=0
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
[backup]
path=/backup
comment = mydata backup
ignore errors = yes
read only=no
hosts allow = 192.168.0.2
hosts deny =*
保存文件並啓動rsync 服務
rsync --daemon -config=/etc/rsyncd.conf
192.168.0.3上面須要配置的內容
vim /etc/rsyncd.secrets
192.168.0.3的密碼
測試
/usr/bin/rsync -auv --progress --delete --password-file=/etc/rsyncd.secrets ./ root@192.168.0.3::backup
至此,全部的操做即已完成.
有什麼疑問能夠留言,互相交流、