原文写于 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,这样的话只要备份机的相同文件比服务器的旧,就会更新该文件,否则不动,这块可能会成为一个缺陷。
