使用rsync做增量备份

原文写于 2011年8月18日 19:07
————————-
前言
我们经常需要数据的备份,包括日志信息,用户数据信息,用户上传数据信息之类,有些数据是不能单单依靠数据库来进行存储与备份。这是我们就会用到rsync,linux下的一个开源工具,非常强大的。我这块需要用到的是使用rsync做数据的增量备份,增量备份是什么概念,就是每次服务主机增加数据以后,同步到备机的时候只是传输增加部分的数据,因此备份的速度会很快,时间就是金钱么。另外,在主机上删除了某个文件,备份机却不会删除,这就是所谓的增量备份,也就不怕找不到误删的数据了,呵呵。然后就开搞吧,rsync的安装就不讲了,网上一搜一大堆。

 

第一步:

了解清楚需要备份的机器的信息:

需要备份的机器的IP(这里称作服务器吧):***.***.***.***

服务器需要备份的目录:/data/log

服务器需要验证的用户名和密码:username passwd

 

备份机IP(存放备份数据的地方):***.***.***.***

 

另外在需要备份的机器和备份机都需要安装rsync软件包

 

第二步:

服务器端相关的一些配置

vim /etc/rsyncd.conf

motd file = /etc/rsyncd.motd

pid file = /var/log/rsyncd.pid

log file = /var/log/rsyncd.log

lock file = /var/run/rsync.lock

 

uid = alenzhou

gid = alenzhou

 

use chroot = no

max connections = 100

##下面一定要有备份机的IP地址

hosts allow = 127.0.0.1,***.***.***.***

transfer logging = yes

timeout = 600

#refuse options = delete

##除过下列的文件。

dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

##可以添加自己需要备份的模块

[log]

path = /data/log

comment = /data/log

ignore errors

read only = no

list = no

然后创建密码文件,格式为 用户:密码 都是明文

#vim /etc/rsyncd.secrets

username:passwd

 

在这些修改了的时候还有一个必须确认,就是rsync已经启动,如果没有,执行命令

rsync –daemon 就可以。

 

第三步:

客户机的配置以及备份脚本的编写

首先,需要有一个备份目录:$mkdir /data/logBackup

另外,在备份目录底下需要一个密码文件:

$ vim /data/logBackup/passwd

passwd  ##注意每行一个

 

下面是备份脚本:test.sh

#****************************************************

#  Author: alenchou.org@gmail.com

#  Last modified: 2011-08-17 21:39

#  Filename: test.sh

#  Description: backup files via rsyn

#****************************************************



#!/bin/bash



sendmail=/usr/local/support/bin/send_mail.pl



RSYNC_SERVER=**.**.**.**

AUTH_USER=user

BAKROOT=/data2/logBak10_135_2_165

[ ! -e $BAKROOT ] && mkdir -p $BAKROOT

PASSWD_FILE=$BAKROOT/passwd

PASSWD_PERM=`ls -l $PASSWD_FILE|awk '{print $1}'`

LOGFILE=$BAKROOT/backup.log

EXCLUDES=$BAKROOT/exclude_file



[ ! -e $EXCLUDES ] && touch $EXCLUDES



BACKUP_MODULES="logFlash logFlashMenagementdev logImg flashDoc"

OPTIONS="--force --ignore-errors --delete --delete-excluded --exclude-from=$EXCLUDES --password-file=$PASSWD_FILE --backup"



echo "-------------------"

echo  $?

rm -f $BAKROOT/log.*

log_id=0

for bakdir in $BACKUP_MODULES; do

    log_id=`expr $log_id + 1`;

echo "-------------------"

echo "$bakdir"

    rsync   -avzP $OPTIONS $AUTH_USER@$RSYNC_SERVER::$bakdir   $BAKROOT/$bakdir  | tee $BAKROOT/log.$log_id;

if [ $? != 0 ];then

          $sendmail "alenzhou"  "[10.147.22.112][`date +"%H:%M:%S"`] trans $bakdir failed.. "  "rsync error"

echo "[note.......................]  trans $bakdir failed."

else

echo "[note.......................]  trans $bakdir success."

fi

echo "end of $bakdir"

echo "-------------------"

done



##### end of test.sh   【修改于2011.8.19 18:57】

 

OK,这样,备份脚本就搞定,在每天的某个时间点执行命令./rsync.sh  就OK

可以使用crond来实现,这个就不介绍。

 

另外,可以在exclude_file 文件中加入不需要备份的子目录或者文件。支持通配符。

由于之前没使用过rsync,第一次使用做的总结,有不正确的地方欢迎指正啊。呵呵。

注意:这块使用–delete的时候会将服务器中没有的,而备份机中有的给删除掉,这里就是所谓的同步备份了,如果要使用增量备份的话需要在选项参数中加–update,同时去掉–delete,这样的话只要备份机的相同文件比服务器的旧,就会更新该文件,否则不动,这块可能会成为一个缺陷。

发表评论

邮箱地址不会被公开。 必填项已用*标注