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