1.服务端和客户端
1.1服务端
一般是客户端把数据和文件推送到服务端,所以服务端配置rsync
vim /etc/rsyncd.conf
内容如下
uid = rsync
gid = rsync
fake super = yes
use chroot = no
max connections = 200
timeout = 300
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsync.lock
exclude = lost+found/
transfer logging = yes
log file=/var/log/rsyncd.log
log format=%t %a %m %f %b
ignore errors
read only=false
list=false
hosts allow=192.168.42.0/24
hosts deny=0.0.0.0/32
auth users=rsync_backup
secrets file = /etc/rsyncd.password
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[backup]
comment = "backup dir by nebula"
path = /backup
port = 873
创建rsync用户
# id rsync
# useradd -s /sbin/nologin -M rsync
创建数据备份储存目录,并修改属主
# mkdir /backup/
# chown -R rsync:rsync /backup/
启动/关闭
# rsync --daemon ------启动
# pkill rsync ------关闭
1.2客户端
设置认证文件(即密码)
# echo "123456" >>/etc/rsync.password
# chmod 600 /etc/rsync.password
1.3数据传输
客户端指定目录推送到server端
####交互式
# rsync -avzP /etc/hosts rsync_backup@192.168.42.147::backup
####免交互式
# rsync -avzP /etc/hosts rsync_backup@192.168.42.143::backup --password-file=/etc/rsync.password
2.rsync备份脚本
每隔7天客户端往服务端做增量备份
#!/bin/bash
BDTR=/root
BSERVER=192.168.42.147
export RSYNC_PASSWORD=123456
BACKUPDIR=`date +%A`
OPTS="--force --ignore-errors --delete-excluded --delete --backup --backup-dir=/$BACKUPDIR -a"
export PATH=$PATH:/bin:/usr/bin/:/usr/local/bin
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync --delete -a $HOME/emptydir/ rsync_backup@$BSERVER::backup/$BACKUPDIR
rmdir $HOME/emptydir
rsync $OPTS $BDTR rsync_backup@$BSERVER::backup
3.rsync+inotify实现实时同步
我们就用之前配置的服务端,若有其它需要,可按需求进行修改
inotify.sh
host=192.168.42.147
src=/runtime
des=backup
password=/etc/rsync.password
user=rsync_backup
inotifywait=/usr/bin/inotifywait
$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files;do
rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des
echo "${file} was rsynced" >>/tmp/rsync.log 2>&1
done
其中各变量取值一定要注意,路径、模块也要对应。runtime在家目录下创建(根据脚本路径决定)
# chmod + x inotify.sh
# bash inotify.sh
脚本运行之后,打开另一个终端在/runtime下创建文件,同步数据后,runtime在服务器中/backup查看(也需要根据服务端配置文件中路径决定)。