1. 程式人生 > >通過rsync遠端增量備份(差異備份)

通過rsync遠端增量備份(差異備份)

備份是寫程式碼的人必不可少的一項工作,傳統的備份,一般就是copy所有資料到一個地方,然後貼上標籤,表示是什麼時候備份的,這種備份被稱之為“整體備份”。
如果經常進行整體備份,對磁碟的空間佔用需求就很大,尤其當你備份大容量的資料的時候,有時候,比如一個星期,只對其中一小部分的內容進行了修改,但是還是需要全部重新備份一次,很顯然,太浪費磁碟空間了;此時增量備份就派上用場了,增量備份,又叫做差異備份,意如其名,只備份修改過的部分。
好了,廢話說完了,來看看如何實際操作,我們用到的軟體是大名鼎鼎的 rsync,很多網站的映象就是用它來完成的。

==================================

環境介紹:
==================================

備份伺服器: 192.168.10.3
需要備份的目錄:/var/www
備份時驗證使用者名稱和密碼: backup/secret
備份客戶機(備份資料存放地):192.168.10.4

客戶機和伺服器均需安裝 rsync 軟體包

===================================
伺服器端配置:
===================================
1、安裝

使用系統自帶的rsync工具,插入系統啟動光碟,通過rpm安裝rsync工具。

若採用採用原始碼包安裝,就是經典的編譯三步曲 

2、建立主配置檔案

# vi /etc/rsyncd.conf 

## file of /etc/rsyncd.conf
motd file=/var/rsync/welcome.msg
pid file = /var/rsync/rsyncd.pid
lock file = /var/rsync/rsync.lock
log file = /var/rsync/rsyncd.log


### 需要備份的模組
[www]
# 模組名後面會用到
comment = bbs
path = /var/www/
use chroot = no
max connections = 4
read only = yes
list = false
uid = nobody
gid = nobody
secrets file = /etc/rsyncd.secrets

hosts allow = 192.168.10.4
hosts deny = 0.0.0.0/0
ignore errors = yes
transfer logging = yes
log format = "%a %f %l"
auth users = backup


上面定義了1個備份點,只允許 192.168.10.4 連線,需要驗證的使用者名稱為 backup
然後建立密碼檔案,每一行格式為: 使用者名稱:密碼,都是明文的


# vi /etc/rsyncd.secrets
backup:123456
# chmod 600 /etc/rsyncd.secrets 

建立日誌或執行目錄 
# mkdir /var/rsync

3、啟動服務
# rsync --daemon

4、編輯/etc/xinetd.d/rsync  (可選步驟)

rsync服務的監聽由xinet來統一分配

service rsync

{
disable = no #將此項改為no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}


重啟xinetd以啟動rsync服務


# service xinetd restart


5、檢查rsync時候啟動
# ps -ef | grep rsync

6、停止服務
# kill `cat /var/rsync/rsyncd.pid`

====================
客戶端的配置
====================
(1)主伺服器向備份伺服器備份
# rsync -vzrtopg --delete --progress [email protected]::www /back


(2)備份伺服器的恢復(主伺服器read only = no)
# rsync -vzrtopg --delete --progress /back [email protected]::www 

(3)增量備份(主要用這個)

備份要求: 所有的資料統一放到一個根目錄下,主備份用每個備份點名字命名,增量備份目錄為 increment,每個備份點的增量備份資料,全部放到這個目錄下面,目錄為當前日期,格式為 2007-08-11_11-22
檔案目錄樹如下:
/var/backup/ 備份根目錄
|---www/ 備份點1的主目錄,這個目錄裡面的資料是備份完成後最新的
|---increment/ 增量備份根目錄
|--- www/ 備份點1的差異/修改備份資料
|--- 2009-12-04_10-22 從最開始備份到08月11日10點22分,所修改的資料
|--- 2009-12-05_11-22 從10點22分到11點22分,所修改過的資料

準備工作:
建立備份根目錄: mkdir /var/backup,其他的目錄備份時會自動被建立

使用系統自帶的rsync工具,插入系統啟動光碟,通過rpm安裝rsync工具

# echo "secret" > /etc/rsyncd.conf

注意,這裡不同於server端,這裡只寫密碼即可

# chmod 600 /etc/rsyncd.conf

客戶端基本不用配置什麼檔案。一個指令碼就OK了。
# vi /etc/rc.d/init.d/rsync.sh

#!/bin/bash
unset verb progress
for i in $*; do
[ "$i" = "verb" ] && verb=v
[ "$i" = "progress" ] && progress="--progress"
done
RSYNC_SERVER=192.168.10.3  #rsync server IP
AUTH_USER=backup
BAKROOT=/var/backup/
INC_DIR=increment
NOW=`date +%Y-%m-%d_%H:%M`


[ ! -e $BAKROOT ] && mkdir -p $BAKROOT
PASSWD_FILE=/etc/rsyncd.conf
PASSWD_PERM=`ls -l $PASSWD_FILE|awk '{print $1}'`
if [ "$PASSWD_PERM" != "-rw-------" ]; then
echo -e "\nWARNING: permission of passwd file changed to 0600 \n";
chmod 0600 $PASSWD_FILE
fi
LOGFILE=/var/log/rsync/rsyncbak.log
EXCLUDES=/var/log/rsync/exclude_file
[ ! -e $EXCLUDES ] && touch $EXCLUDES
BACKUP_MODULES="www" #如需備份多個目錄,在“”內新增server端的模組名,用空格隔開
OPTIONS="--force --ignore-errors --delete --delete-excluded \
--exclude-from=$EXCLUDES $progress \
--password-file=$PASSWD_FILE --backup"
rm -f /var/log/rsync/log.*
log_id=0
for bakdir in $BACKUP_MODULES; do
log_id=`expr $log_id + 1`
SUBOPTS="--backup-dir=$BAKROOT/$INC_DIR/$BACKUP_MODULES/$NOW -az${verb}"
rsync $OPTIONS $SUBOPTS [email protected]$RSYNC_SERVER::$bakdir \
$BAKROOT/$bakdir | tee /var/log/rsync/log.$log_id
done
### 合併臨時日誌到備份日誌中
cat /var/log/rsync/log.* >> $LOGFILE
rm -f /var/log/rsync/log.*
##### end of rsync.sh
# chmod a+x /etc/rc.d/init.d/rsync.sh

開始備份
# /etc/rc.d/init.d/rsync.sh verb progress

備份時,會自動從密碼檔案讀取密碼進行驗證,備份的詳細資訊及進度會在當前終端輸出,同時也記錄到 backup.log 檔案中。
兩次備份後,如果資料在這段時間內有改動,會產生差異備份資料,用當前時間命名,便於以後查詢
如果有些資料你不想備份,可以加入到 exclude_file 檔案中,每條記錄佔一行,支援萬用字元,比如
/tmp         ## 排除名為 tmp 的根目錄   
.[a-z]*     ## 不備份以點開頭的隱藏檔案

(4)任務計劃
# crontab -e
0 2 * * *    /etc/rc.d/init.d/rsync.sh

每天早上2點備份

相關推薦

通過rsync遠端增量備份(差異備份)

備份是寫程式碼的人必不可少的一項工作,傳統的備份,一般就是copy所有資料到一個地方,然後貼上標籤,表示是什麼時候備份的,這種備份被稱之為“整體備份”。如果經常進行整體備份,對磁碟的空間佔用需求就很大,尤其當你備份大容量的資料的時候,有時候,比如一個星期,只對其中一小部分的

看完,你就理解什麽是數據的全量、增量差異備份

-a 在一起 image 所有 play raw class 完整 splay 在很遠很遠的地方,有一個帳房先生。 他每天要記很多很多的賬單。 老先生一生謹慎,為了保證賬本的安全, 便找來三個徒弟幫忙來對賬本做備份, 這樣即使賬本丟失了, 也可以用備份的賬本繼續使用。

SQL Server 2008/2012 完整資料庫備份+差異備份+事務日誌備份 資料庫完整還原(一)

還原方案 資料庫級(資料庫完整還原) 還原和恢復整個資料庫。資料庫在還原和恢復操作期間會處於離線狀態。SQL SERVER不允許使用者備份或還原單個表。還原方案是指從一個或多個備份中還原資料、繼而恢復資料庫的過程。 不同恢復模式所支援的各種還原方案 簡單恢復

通過 rsync 做日誌log備份

rsync 日誌備份 log rsyslog1、拓撲如下:2、通過rsync日誌備份1>ssh 免密鑰登陸確定發起方,從log-back-server_10.1.1.1 為中心發起方。因此,要實現從log-server到各主機之前的 免密登陸。在log-server 主機上,cd ~ &&a

通過rsync備份靜態文件

shell腳本內容:#!/bin/bashdn=`dirname $0`cd $dnawk ‘/^[^#]/‘ rsync_dir.txt | while read linedo i=1 dirarr=($line) len=${#dirarr[@]} if [ $len -gt 1

完整備份增量備份差異備份

linux備份概念完整備份、增量備份、差異備份完整備份:對數據文件進行完整的備份(復制)一份在本地或網絡其他位置。比較消耗資源,但是可以保證數據完整性。A=A增量備份:在上一次完整備份、增量備份的基礎上只對每次發生變化(新增或修改)的數據文件進行遞增備份。這種備份方式備份比較方便,可以減少資源消耗。但是有一個

Linux使用 tar命令-g參數進行增量+差異備份、還原文件

參數 測試 file cnblogs filesyste hot mkdir HP tarball 原文鏈接:http://www.cnblogs.com/gnuhpc/ 完整備份: 建立測試路徑與檔案 mkdir test touch test/{a,b,c} 在t

mysql資料庫的完整備份差異備份增量備份

完整備份:(t為資料庫名) Mysql -uroot -pPassword  t -e "FLUSH TABLES";  // 關閉所有開啟的表, 把記憶體中的快取寫入磁碟 Mysql -uroot -pPassword  t -e "FLUSH TABLES WITH

如何通過rman的增量備份恢復dataguard中standby端的資料

很多正在使用dataguard的客戶,都會遇到一個棘手的問題: 在備份端與主庫同步的過程中由於網路原因或磁碟問題導致一個或多個歸檔日誌丟失,進而dataguard同步無法繼續。很多客戶都選擇了重新全庫恢復,並重新搭建dataguard。 如果我們的源資料庫非常大(超過100G的資料量),其實可以選擇一種更簡便

Mongodb通過shell指令碼增量備份到HDFS

用Mongodb自帶的Mongoexport,通過shell指令碼的方式進行增量備份到HDFS上 1.思路介紹: Mongodb安裝目錄下bin目錄裡有兩個工具:mongoexport和mongodump這兩個工具可以實現備份mongodb的資料。用法也類似,區別這裡不做說明,自行搜尋。mongoexport

遠端Linux伺服器中備份MySQL資料庫,通過scp將遠端Linux伺服器中檔案下載到本地Linux電腦中

1.首先登入到遠端伺服器(ip 10.46.2.228),可通過ssh方式登入,確保ssh服務和22埠正常才能使用scp命令下載檔案; 2.執行命令 mysqldump -u root -p mysql(要匯出的資料庫名) > mysql.sql(匯出資料庫儲存檔名

Oracle Rman 增量備份差異備份

一、增量與差異   問題: RMAN differential Backups 是什麼?它和 RMAN cumulative Backups 有啥區別?它們倆和 RMAN incremental backup 一樣嗎?   答案: D

SQL Server 備份和還原全攻略, 完全備份差異備份增量備份,事務日誌備份

2011-06-29 17:03 by 聽風吹雨, 3435 閱讀, 17 評論, 收藏, 編輯 一、知識點 完全備份: 備份全部選中的資料夾,並不依賴檔案的存檔屬性來確定備份那些檔案。(

增量備份+增量備份的實現方式+差異備份案例+累積備份案例

增量備份 1增量備份就是將那些與前一次備份相比發生變化的資料塊複製到備份集中 2增量備份時,rman會讀取整個資料檔案,通過rman可以為單獨的資料檔案,表空間,整個資料庫進行增量備份 3增量備份

完全備份數據和差異備份數據的shell腳本

完全備份數據和差異備份數據的shell腳本#!/bin/bash # # Description: 該腳本功能,以周為單位循環;周五實行完全備份,周六不備份,周日至周四實行差異備份; # 因工作需要,不實行壓縮打包的方式,采用cp完全備份,rsync差異備份; #

rsync數據鏡像備份工具

備份 rsync 定時備份 rsync簡介:rsync(remote synchronize)是Liunx/Unix下的一個遠程數據同步工具。它可通過LAN/WAN快速同步多臺主機間的文件和目錄,並適當利用rsync算法(差分編碼,也就是差異傳輸)以減少數據的傳輸。因此同步兩端的數據很快,而且對同

sqlserver全備份差異備份和日誌備份

serve center 圖片 正常 gravity 完整備份 bsp nts == 差異備份是以上一個全備為基點,這個期間所有差異數據的備份。 日誌備份是基於前一個全備+日誌備份為基點,這個期間的事務日誌的備份。(日誌備份用於確保還原數據庫到某個時間點)

sqlserver完整差異備份還原

from 修改 src itl idt 兩個 sql bak 進行 Sql server 的完整備份和差異備份 完整備份當然就是將數據庫的數據全部備份 而差異備份指得是將上一次備份後到現在對數據的修改進行備份. 因此差異備份不能單獨使用,只能先還原上一次的完整備份後,才能

一次差異備份拿shell過程

shadow 寫入 一次 科普 table 正文 blog 條件 目前 0x00 前言 掃描器掃到了某個網站存在目錄瀏覽,於是便有了本文。。。 知識點科普: 1. 目錄瀏覽 目錄瀏覽在我個人看來是危害較大的一個漏洞,該漏洞是指“在沒有默認文檔的目錄下,列出該目錄下所有文

C#編寫自動差異備份文件夾

http rod fault 對話 object ted int32 status auto 手動或定時將源文件夾中的全部文件自動與目標文件夾中的文件做對比,如果源文件夾中的文件更新,則將其復制到目標文件夾中替換目標文件夾中的文件。 界面: 界面中的內容: