服務(wù)器需求:
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序設(shè)計(jì)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了宕昌免費(fèi)建站歡迎大家使用!
需要備份文件的服務(wù)器(服務(wù)器端):192.168.10.2 (RHEL 5)
接收備份文件的服務(wù)器(客戶端):192.168.10.3 (RHEL 5)
實(shí)現(xiàn)功能:
通過(guò)rsync工具對(duì)turbomail郵件服務(wù)器的accounts目錄和conf目錄進(jìn)行增量備份。
accounts目錄:用于存儲(chǔ)用戶相關(guān)信息的目錄
conf目錄:用戶配置文件存放目錄
前提條件:
先將turbomail郵件系統(tǒng)安裝好(服務(wù)器端與客戶端操作一樣)
安裝過(guò)程如下:
1、掛載光驅(qū):mount /dev/cdrom
2、將turbomail的安裝包拷貝到跟目錄下/
#cd /dev/cdrom
#cp turbomail_linux_x86_xxx.tgz
3、解壓turbomail安裝包
tar –zxvf turbomail_linux_x86_xxx.tgz
4、啟動(dòng)turbomail
#cd /turbomail
#./starttm.sh
#cd /turbomail/web/bin/
#./startup.sh 5、修改啟動(dòng)腳本/etc/rc.d/rc.local
使郵件服務(wù)器開(kāi)機(jī)自動(dòng)啟動(dòng)加入以下幾行:#/turbomail/starttm.sh
#/turbomail/web/bin/startup.sh #/turbomail/safestart.sh
rsync的配置如下:
1.服務(wù)器端rsync的配置:使用系統(tǒng)自帶的rsync工具,插入系統(tǒng)啟動(dòng)光盤(pán),通過(guò)rpm安裝rsync工具。
若采用采用源碼包安裝,上傳安裝包到服務(wù)器1)tar –zxvf rsyncrsync-2.6.9.tar.gz #解壓2)cd rsyncrsync-2.6.9 3)./configure #默認(rèn)配置,生成編譯環(huán)境
4)make #編譯
5)make install #安裝完成,任何步驟有疑問(wèn)輸入echo $?查返回值,0表示成功,其他都為失敗rsync 版本
2.4.6(可以從獲得最新版本)
1)編輯/etc/rsyncd.conf文件,rsync的主要配置文件:
#[globale]
strict modes= yes
#check passwd file
port= 873 #rsync工具默認(rèn)使用的端口
#default port
logfile= /var/log/rsyncd.log #日志文件存放路徑pidfile= /var/run/rsyncd.pid #記錄rsync運(yùn)行時(shí)的進(jìn)程ID
max connections= 4 #同上最大的鏈接數(shù)
#[modules] #同步模塊的配置
[rsync]
uid= root #該選項(xiàng)指定當(dāng)該模塊傳輸文件時(shí)守護(hù)進(jìn)程應(yīng)該具有的uid
gid= root #該選項(xiàng)指定當(dāng)該模塊傳輸文件時(shí)守護(hù)進(jìn)程應(yīng)該具有的gid
ignore errors #忽略一些無(wú)關(guān)的錯(cuò)誤信息
#要備份的目錄
path= /turbomail/accounts #需要同步的目錄
read only= no #是否設(shè)置以只讀的方式運(yùn)行
host allow= 192.168.10.3 #同步數(shù)據(jù)的客戶端ip如有多個(gè)客戶端,以“,”隔開(kāi)即可
auth users= zhouhw #同步用的用戶名
secrets file= /etc/rsyncd.scrt #同步的密碼認(rèn)證文件
[test]
uid= root #該選項(xiàng)指定當(dāng)該模塊傳輸文件時(shí)守護(hù)進(jìn)程應(yīng)該具有的uid
gid= root #該選項(xiàng)指定當(dāng)該模塊傳輸文件時(shí)守護(hù)進(jìn)程應(yīng)該具有的gid
ignore errors #忽略一些無(wú)關(guān)的錯(cuò)誤信息
#要備份的目錄
path= /turbomail/conf #需要同步的目錄
read only= no #是否設(shè)置以只讀的方式運(yùn)行
host allow= 192.168.10.3 #同步數(shù)據(jù)的客戶端ip如有多個(gè)客戶端,以“,”隔開(kāi)即可
auth users= zhouhw #同步用的用戶名
secrets file= /etc/rsyncd.scrt #同步的密碼認(rèn)證文件2)編輯/etc/rsyncd.scrt文件,密碼認(rèn)證文件
zhouhw:123456
該更權(quán)限為600:chmod 600 /etc/rsyncd.scrt 3) 運(yùn)行rsync --daemon,并在/etc/rc.d/rc.local加入此語(yǔ)句,開(kāi)機(jī)自動(dòng)啟動(dòng)。
備注:rsync默認(rèn)端口873,若安裝了iptables,如需改動(dòng)啟動(dòng)時(shí)啟動(dòng)rsync –port 873,請(qǐng)?jiān)趇ptables 中開(kāi)放該端口,語(yǔ)句如下:
iptables -I INPUT -p tcp --dport 873 -j ACCEPT
4)編輯/etc/xinetd.d/rsync
rsync服務(wù)的監(jiān)聽(tīng)由xinet來(lái)統(tǒng)一分配:
service rsync
{
disable = no #將此項(xiàng)改為no
socket_typ
e = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
重啟xinetd以啟動(dòng)rsync服務(wù)
service xinetd restart
5)查看rsync事故正常運(yùn)行
輸入命令:netstat -ant|grep :873若有顯示以下一條語(yǔ)句,則說(shuō)明rsync服務(wù)已經(jīng)正常啟動(dòng)了。
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 2.客戶端的配置:使用系統(tǒng)自帶的rsync工具,插入系統(tǒng)啟動(dòng)光盤(pán),通過(guò)rpm安裝rsync工具。
1)編輯/etc/rsyncd.scrt文件,密碼認(rèn)證文件
zhouhw:123456
該更權(quán)限為600:chmod 600 /etc/rsyncd.scrt 2)編輯腳本vi /root/scrpit/rsync.sh并加入開(kāi)機(jī)自動(dòng)啟動(dòng)。
#!/bin/sh /usr/bin/rsync -vazu --progress --delete
zhouhw@192.168.10.2::rsync /turbomail --password-file=/etc/rsyncd.scrt
zhouhw@192.168.10.2::test /turbomail
--password-file=/etc/rsyncd.scrt修改權(quán)限:chmod u+x
/root/scrpit/rsync.sh執(zhí)行./rsync.sh 同步數(shù)據(jù)。
3)編輯/etc/crontab文件,定義為每小時(shí)30分鐘執(zhí)行一次數(shù)據(jù)同步。
vi /etc/crontab
# run-parts
01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root
run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4
1 * * root run-parts /etc/cron.monthly 30 * * * * root
/root/scrpit/rsync.sh客戶端的配置到此就可以了,服務(wù)器與客戶端的數(shù)據(jù)也會(huì)在每小時(shí)的第30分鐘執(zhí)行一次。
客戶端同步命令詳解:
v, --verbose 詳細(xì)模式輸出-q, --quiet 精簡(jiǎn)輸出模式-c, --checksum
打開(kāi)校驗(yàn)開(kāi)關(guān),強(qiáng)制對(duì)文件傳輸進(jìn)行校驗(yàn)-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于-rlptgoD
-r, --recursive 對(duì)子目錄以遞歸模式處理-R, --relative 使用相對(duì)路徑信息-b, --backup
創(chuàng)建備份,也就是對(duì)于目的已經(jīng)存在有同樣的文件名時(shí),將老的文件重新命名為~filename??梢允褂?-suffix選項(xiàng)來(lái)指定不同的備份文件前綴。
--backup-dir 將備份文件(如~filename)存放在在目錄下。
-suffix=SUFFIX定義備份文件前綴
-u, --update 僅僅進(jìn)行更新,也就是跳過(guò)所有已經(jīng)存在于DST,并且文件時(shí)間晚于要備份的文件。(不覆蓋更新的文件) -l, --links 保留軟鏈結(jié)-L, --copy-links 想對(duì)待常規(guī)文件一樣處理軟鏈結(jié)
--copy-unsafe-links僅僅拷貝指向SRC路徑目錄樹(shù)以外的鏈結(jié)
--safe-links忽略指向SRC路徑目錄樹(shù)以外的鏈結(jié)
-H, --hard-links 保留硬鏈結(jié)-p, --perms 保持文件權(quán)限-o, --owner 保持文件屬主信息-g,
--group 保持文件屬組信息-D, --devices 保持設(shè)備文件信息-t, --times 保持文件時(shí)間信息-S, --sparse
對(duì)稀疏文件進(jìn)行特殊處理以節(jié)省DST的空間-n, --dry-run現(xiàn)實(shí)哪些文件將被傳輸-W, --whole-file
拷貝文件,不進(jìn)行增量檢測(cè)-x, --one-file-system 不要跨越文件系統(tǒng)邊界-B, --block-size=SIZE
檢驗(yàn)算法使用的塊尺寸,默認(rèn)是700字節(jié)-e, --rsh=COMMAND 指定替代rsh的shell程序
--rsync-path=PATH指定遠(yuǎn)程服務(wù)器上的rsync命令所在路徑信息
-C, --cvs-exclude 使用和CVS一樣的方法自動(dòng)忽略文件,用來(lái)排除那些不希望傳輸?shù)奈募?-existing 僅僅更新那些已經(jīng)存在于DST的文件,而不備份那些新創(chuàng)建的文件
--delete刪除那些DST中SRC沒(méi)有的文件
--delete-excluded同樣刪除接收端那些被該選項(xiàng)指定排除的文件
--delete-after傳輸結(jié)束以后再刪除
--ignore-errors及時(shí)出現(xiàn)IO錯(cuò)誤也進(jìn)行刪除
--max-delete=NUM最多刪除NUM個(gè)文件
--partial 保留那些因故沒(méi)有完全傳輸?shù)奈募?,以是加快隨后的再次傳輸--force 強(qiáng)制刪除目錄,即使不為空
--numeric-ids不將數(shù)字的用戶和組ID匹配為用戶名和組名
--timeout=TIME IP超時(shí)時(shí)間,單位為秒-I, --ignore-times
不跳過(guò)那些有同樣的時(shí)間和長(zhǎng)度的文件--size-only
當(dāng)決定是否要備份文件時(shí),僅僅察看文件大小而不考慮文件時(shí)間--modify-window=NUM 決定文件是否時(shí)間相同時(shí)使用的時(shí)間戳窗口,默認(rèn)為0
-T --temp-dir=DIR在DIR中創(chuàng)建臨時(shí)文件
--compare-dest=DIR同樣比較DIR中的文件來(lái)決定是否需要備份
-P等同于--partial
--progress顯示備份過(guò)程
-z, --compress 對(duì)備份的文件在傳輸時(shí)進(jìn)行壓縮處理
--exclude=PATTERN指定排除不需要傳輸?shù)奈募J?/p>
--include=PATTERN指定不排除而需要傳輸?shù)奈募J?/p>
--exclude-from=FILE排除F
ILE中指定模式的文件
--include-from=FILE不排除FILE指定模式匹配的文件
--version打印版本信息
--address綁定到特定的地址
--config=FILE 指定其他的配置文件,不使用默認(rèn)的rsyncd.conf文件
--port=PORT指定其他的rsync服務(wù)端口
--blocking-io對(duì)遠(yuǎn)程shell使用阻塞IO
-stats給出某些文件的傳輸狀態(tài)
--progress在傳輸時(shí)現(xiàn)實(shí)傳輸過(guò)程
--log-format=formAT指定日志文件格式
--password-file=FILE從FILE中得到密碼
--bwlimit=KBPS 限制I/O帶寬,KBytes per second -h, --help 顯示幫助信息
DD(1) General Commands Manual DD(1)
NAME
dd - 轉(zhuǎn)換和拷貝文件
摘要
dd [--help] [--version] [if=file] [of=file] [ibs=bytes] [obs=bytes]
[bs=bytes] [cbs=bytes] [skip=blocks] [seek=blocks] [count=blocks]
[conv={ascii, ebcdic, ibm, block, unblock, lcase, ucase, swab, noerror,
notrunc, sync}]
描述
當(dāng)進(jìn)行非強(qiáng)制的轉(zhuǎn)換的時(shí)候,使用指定的輸入和輸出塊大小拷貝文件
(默認(rèn)是從標(biāo)準(zhǔn)輸入到標(biāo)準(zhǔn)輸出。)
它每次從輸入讀取指定大小的一個(gè)塊(默認(rèn)是512字節(jié))。 如果使用 bs=bytes
選項(xiàng),并且沒(méi)有轉(zhuǎn)換,除了指定 sync, noerror, 或 notrunc 之外,
那么dd將把全部讀到的數(shù)據(jù)(可以比請(qǐng)求讀的少) 寫(xiě)到獨(dú)立的輸出塊去。
這個(gè)輸出塊的長(zhǎng)度和讀到的數(shù)據(jù) 完全一樣,除非指定使用 sync(同步)
轉(zhuǎn)換,那樣的話,數(shù)據(jù)結(jié)尾處將追加NUL字符(或空格,見(jiàn)下)。
其他情況下,輸入的時(shí)候每次讀一個(gè)塊,然后處理,并將
輸出結(jié)果收集起來(lái),最后寫(xiě)到指定大小的數(shù)據(jù)塊中去。最
終的輸出塊可能會(huì)比指定的大小短一些。
數(shù)字值選項(xiàng)(以字節(jié)或塊為單位)后面可以跟一個(gè)乘數(shù):
k=1024,b=512,w=2,c=1(w和c是GNU擴(kuò)展語(yǔ)法。最好別 使用w,因?yàn)樵趕ystem
V中,它表示2,在4.2 BSD中,它
表示4)。兩個(gè)或更多的數(shù)值表達(dá)式可以通過(guò)“x”乘起來(lái)。 GEU fileutils
4.0并且允許在數(shù)據(jù)塊大小的敘述中使用
下列乘法后綴(用bs=,cbs=,obs=):M=1048576,G=1073741824,
同理可得T,P,E,Z,Y。D后綴表示數(shù)值是以 十進(jìn)制表示的:kD=1000
MD=1000000 GD=1000000000等等。
(注意,在ls、df、du命令中,M等標(biāo)記的大小是由環(huán)境
變量確定的,而在DD中,它的值是固定的。)
選項(xiàng)
if=file
從 file 中讀而不是標(biāo)準(zhǔn)輸入。
of=file
寫(xiě)到 file 里去而不是標(biāo)準(zhǔn)輸出。除非指定 conv=notrunc ,否則, dd
將把 file 截為O字節(jié)(或由 seek= 選項(xiàng)指定的大?。?/p>
ibs=bytes
一次讀 bytes 字節(jié)。默認(rèn)是512。
obs=bytes
一次寫(xiě) bytes 字節(jié)。默認(rèn)是512。
bs=bytes
一次讀和寫(xiě) bytes 字節(jié)。這將覆蓋 ibs 和 obs 設(shè)定的值(并且,設(shè)定
bs 不等于同時(shí)將 ibs 和 obs 設(shè)為同一個(gè)值,至少在 只使用 sync,
noerror 或 notrunc
轉(zhuǎn)換時(shí)是這樣的。因?yàn)閎s規(guī)定,每個(gè)輸入塊都應(yīng)作為單獨(dú)
的數(shù)據(jù)塊拷貝到輸出,而不把較短的塊組合到一起)。
cbs=bytes
為 block 轉(zhuǎn)換和 unblock 轉(zhuǎn)換指定轉(zhuǎn)換塊的大小。
skip=blocks
在拷貝之前,跳過(guò)輸入文件的前 blocks 塊,每塊大小為 ibs-byte
字節(jié)。
seek=blocks
在拷貝之前,跳過(guò)輸出文件的前 blocks 塊,每塊大小為 obs-byte
字節(jié)。
count=blocks
只拷貝輸入文件的前 blocks 塊(每塊的大小為 ibs-byte
字節(jié)),而不是全部?jī)?nèi)容,直到文件末尾。
conv=轉(zhuǎn)換"[,"轉(zhuǎn)換"]..."
將文件按 轉(zhuǎn)換 參數(shù)指定的方式轉(zhuǎn)換(在“,”兩邊沒(méi)有空格)。
轉(zhuǎn)換方式包括:
ascii 將EBCDIC轉(zhuǎn)換成ascii。
ebcdic 將ascii轉(zhuǎn)換成ebcdic。
ibm 將ascii轉(zhuǎn)換成alternative ebcdic。
block 每一行輸入,無(wú)論長(zhǎng)短,輸出都是 cbs
字節(jié),并且其中的“換行”(NEWLINE,即c中的'0)用
空格替換。如有必要,行尾會(huì)填充空格。
unblock
用“換行”替換每個(gè)輸入塊( cbs 字節(jié)大?。┠┪驳目崭?。
lcase 將大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)。
ucase 將小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)。
swab 交換每對(duì)輸入字節(jié)。如果讀入的字節(jié)數(shù)是奇數(shù),最后
一個(gè)字節(jié)只是簡(jiǎn)單的復(fù)制到輸出(因?yàn)闆](méi)有能跟它交換的
字節(jié)了)(POSIX 1003.26,PASC翻譯1003.2 3號(hào)和4號(hào))。
noerror
發(fā)生讀錯(cuò)誤時(shí),繼續(xù)進(jìn)行。
notrunc
不截?cái)噍敵鑫募?/p>
sync 用0填充到每個(gè)輸入塊的末尾,使其大小為 ibs 字節(jié)。
GNU標(biāo)準(zhǔn)選項(xiàng)
--help 將用法信息打印到標(biāo)準(zhǔn)輸出,并成功退出。
--version
將版本信息打印到標(biāo)準(zhǔn)輸出,并成功退出。
-- 結(jié)束選項(xiàng)列表。
環(huán)境變量
LANG, LC_ALL, LC_CTYPE和LC_MESSAGES具有其通常含義。
遵循標(biāo)準(zhǔn)
POSIX 1003.2
舉例
磁帶機(jī)通常不能接受任意大小的數(shù)據(jù)塊,當(dāng)最后一個(gè)數(shù)據(jù)片
段不能充滿整個(gè)塊時(shí), dd 將出現(xiàn)I/O錯(cuò)誤。用'dd if=myfile of=/dev/mytape
conv=sync' 就可以使全部?jī)?nèi)容存到磁帶上。當(dāng)然,這樣做,把文件從磁
帶上讀回時(shí)回產(chǎn)生一個(gè)稍大些的文件,因?yàn)槠湮膊刻畛淞艘?些NUL(空字符)。
以上是man手冊(cè)的資料
dd就是分區(qū)的拷貝操作,一個(gè)分區(qū)或者說(shuō)硬盤(pán)上某些扇區(qū)的某些塊(指定位置)都可以被視為一個(gè)磁帶,dd就是把固定的塊上保存的二進(jìn)制內(nèi)容做拷貝操作.
創(chuàng)建腳本/root/script/backup.sh
# 該腳本應(yīng)用于10多臺(tái)普通的Linux應(yīng)用服務(wù)器,多年來(lái)從未出過(guò)差錯(cuò)。
# 數(shù)據(jù)庫(kù)備份較為特殊,這里不包含數(shù)據(jù)庫(kù)備份。
# 因?yàn)槟_本中含有FTP密碼,所以FTP僅給予寫(xiě)權(quán)限較為安全,F(xiàn)TP中的老備份的定期刪除任務(wù)由FTP服務(wù)器完成。
# 備份加入到自動(dòng)任務(wù)中,每周六23:00執(zhí)行,并寫(xiě)入日志,如下:
# 追加下面語(yǔ)句到/etc/crontab中
# 0 23 * * 6 root /root/script/backup.sh /root/script/backup.log 21
#有注釋版:
#!/bin/bash
#=====================================================
#author zhaoyn
#date 2010/12/31
#=====================================================
#參數(shù)設(shè)定
basedir=/opt/backup #備份存放的目錄
days=15 #備份在本地保留天數(shù)
bakfiles="/root/script /etc" #需要備份的目錄或文件,請(qǐng)不要使用快捷方式或通配符
ftpip=XXX.XXX.XXX.XXX #異地備份的FTP地址
ftpuser='username' #異地備份的FTP用戶名
ftppw='password' #異地備份的FTP密碼
echo =====================================================
date
cd $basedir
#刪除備份目錄中15天以前備份文件,不包含子目錄
find -maxdepth 1 -name "*.tgz" -mtime +"$days" -exec rm -f {} \;
for bakfile in $bakfiles
do
file=`basename $bakfile`
#壓縮打包需要備份的目錄,包括權(quán)限,文件命名包含當(dāng)前時(shí)間
tar -czpf "$file"_$(date +%Y%m%d-%H%M).tgz $bakfile
#大文件打包前后,緩解磁盤(pán)壓力,降低I/O錯(cuò)誤概率
sleep 10s ;sync;sync
done
#通過(guò)FTP上傳當(dāng)天備份的文件到異地
ftp -v -n -i $ftpip END
user $ftpuser $ftppw
bin
mput *$(date +%Y%m%d)*.tgz
bye
END
#無(wú)注釋版:
#!/bin/bash
#=====================================================
#author zhaoyn
#date 2010/12/31
#=====================================================
basedir=/opt/backup
days=15
bakfiles="/root/script /etc"
ftpip=XXX.XXX.XXX.XXX
ftpuser='username'
ftppw='password'
echo =====================================================
date
cd $basedir
find -maxdepth 1 -name "*.tgz" -mtime +"$days" -exec rm -f {} \;
for bakfile in $bakfiles
do
file=`basename $bakfile`
tar -czpf "$file"_$(date +%Y%m%d-%H%M).tgz $bakfile
sleep 10s ;sync;sync
done
ftp -v -n -i $ftpip END
user $ftpuser $ftppw
bin
mput *$(date +%Y%m%d)*.tgz
bye
END
Mysql的備份,如果凌晨可以停止幾分鐘,那么強(qiáng)烈建議對(duì)Mysql執(zhí)行物理備份,腳本如下
#!/bin/bash
#History
#=====================================================
#When Who What
#2010/3/24 Zhaoyn Create
#
#=====================================================
basedir=/opt/backup
updir=$basedir/updir
timenow=$(date +%Y%m%d-%H%M)
# 刪除mysql十四天前的數(shù)據(jù),注意,這里僅刪除了mysql的tgz文件。
rm -f `find $basedir -name "mysql*.tgz" -mtime +14`
# 由于數(shù)據(jù)庫(kù)在有連接的情況下,直接對(duì)數(shù)據(jù)文件打包是可能出問(wèn)題的,所以這里我們?cè)诖虬耙S脭?shù)據(jù)庫(kù),這樣直接對(duì)數(shù)據(jù)文件打包,恢復(fù)時(shí)只需解壓數(shù)據(jù)文件到新環(huán)境相應(yīng)的目錄即可,默認(rèn)是/var/lib/mysql
# 如果白天也要進(jìn)行數(shù)據(jù)庫(kù)備份,請(qǐng)使用mysqldump命令,進(jìn)行在線備份?;謴?fù)也挺方便的。
/etc/rc.d/init.d/mysqld stop
sleep 5s ;sync;sync
tar -czpf $basedir/mysql.$timenow.tgz /var/lib/mysql
/etc/rc.d/init.d/mysqld start
#=====================================================
附件中的腳本文件是有DOS換行符(CR/LF)的,復(fù)制文件中的內(nèi)容到SSH客戶端沒(méi)有問(wèn)題,如果直接拷貝文件到Linux系統(tǒng)中,可先運(yùn)行下面的命令:
mv *.txt *sh
dos2unix *.sh