linux rsync 同步数据小玩具

如何使用rsync 同步数据
我这里系统版本是 CentOS release 6.5 (Final) rsync 版本

第一步安装 xinetd ,

yum -y install xinetd
2 修改rsync的相关配置
service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
将disable = yes改成disable = no
然后重启xinetd
# /etc/init.d/xinetd restart
3 如果防火墙开启着。。
[
注:如果服务器上装有防火墙,需要打开端口,默认端口是873
# telnet 127.0.0.1 873
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
下面是防火墙开启 873端口的方法
# iptables -A INPUT -s 192.168.0.0/255.255.255.0 -p tcp -m tcp --dport 873 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 873 -j DROP
]
4 新建 rsync的配置文件 vi /etc/rsyncd.conf 并保存以下内容
port = 873
#开放端口
uid = nobody
#进行备份的用户UID ,nobody 为任何用户
gid = nobody
#进行备份的组GID ,nobody 为任意组
user chroot = no
#如果"use chroot"指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实##现额外的安全防护,但是缺 点是需要以root权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下c##hroot值为true。但是这个一般不需要,所以我选择no或 false
motd file = /etc/rsyncd.motd
# 展现给调用者看的
max connections = 200
#最大连接数
list = no
#不允许列清单
timeout = 600
#覆盖客户指定的Ip超时时间 也就是说rsync服务器不会永远等待一个崩溃的客户端
pid file = /var/run/rsyncd.pid
#pid文件存放的位置
lock file = /var/run/rsyncd.lock
#锁文件存放的位置
log file = /var/log/rsyncd.log
#日志文件存放位置
[lj]
#这里是认证模块名,即跟samba语法一样,是对外公布的名字
path = /home/www/lj
#参与同步的目录i
comment = test in one pc
ignore errors
#可以忽略一些无关的IO错误
read only = no
#允许可读可写
write only = yes
list = no
# 不允许列清单
hosts allow = 127.0.0.1
#设置允许访问的ip 这里我测试的时候是我本地,所以我写了(127.0.0.1)可以为*(所有)
auth users = root
#认证的用户名
secrets file = /etc/rsyncd.secrets
#密码文件存放的地址
**[lj]是认证模块名和 path = /home/www/lj 是参与同步的目录
这里的path 大家要记好了,这里不要随便的一设置就直接完事,要知道这里是认证模块的,以后从客户机备份的数据会存储在这里。
5 上面的 secrets file 是用户密码文件
# 要编辑
vi /etc/rsyncd.secrets
#用户名:密码
root:password (就是你登陆服务器的账号和密码)
这个文件的权限应该是读写权限
如果你用的不是root用户 那么你要修改一下她的owner 和 group
chown root:root /etc/rsyncd.secrets(记得把root改为你所用的用户及所在组)
chmod 600 /etc/rsyncd.secrets
6 注意你必须保障你得path文件存在 否则会报 chroot failed 错误。
mkdir /home/www/lj/
7 启动你得rsync
rsync --daemon 以守护方式启动服务
加入开机自启动
echo "rsync --daemon">> /etc/rc.local
8 如果你是两台机器那么你得客户端也要安装rsync
yum -y install rsync
这里我是在一台服务器上玩的,
所以我只需要直接编写密码文件。
vi /etc/rsyncd.passwd
这里也应该是 600的权限。
里面只写你得密码
比如:123456xxx
9 最后 执行一下
rsync -azvP --port=873 --password-file=/etc/rsyncd.passwd /home/www/jl/* root@127.0.0.1::lj
解释一下这个命令
rsync 的参数 -azvP
-a --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-z --compress 对备份的文件在传输时进行压缩处理
-v --verbose 详细模式输出
-P --partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--port 指定端口
--password-file 指定密码文件
/home/www/jl/* 指定要推送的本地路径
root 是用户
127.0.0.1 是目标ip 如果是两台机器的话 那么这里就是服务端的Ip
双冒号后面的lj 就是 上面所说的认证模块名。
10 最后可能遇到的问题。
@ERROR: auth failed on module lj
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.6]
服务器端该模块(lj)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。
提供正确的用户名密码解决此问题。
@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.6]
这里就是你得path不存在 看看是不是写错了或者权限不足。
服务器端的目录不存在或无权限,创建目录并修正权限可解决问题。
@ERROR: access denied to www from unknown (192.168.1.123)
这里是因为你得hosts allow 配置的不对,
rsync: failed to connect to 61.128.127.554: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.6]
rsync 服务没有开启。
启动服务:rsync --daemon --config=/etc/rsyncd.conf
Rsync的命令格式可以为以下六种:
1 rsync [OPTION]... SRC DEST
2 rsync [OPTION]... SRC [USER@]HOST:DEST
3 rsync [OPTION]... [USER@]HOST:SRC DEST
4 rsync [OPTION]... [USER@]HOST::SRC DEST
5 rsync [OPTION]... SRC [USER@]HOST::DEST
6 rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
对应于以上六种命令格式,rsync有六种不同的工作模式:
1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。如:rsync -a /data /backup
2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。如:rsync -avz *.c foo:src
3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。如:rsync -avz foo:src/bar /data
4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。如:rsync -av root@172.16.78.192::www /databack
5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www
6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://172.16.78.192/www
rsync [] ... src user@host:dest 从本地到远程 客户端
rsync [] ... src user@host::dest
rsync [] ... user@host::src dest 从远程到本地
rsync [] ... user@host:src dest
一个冒号的用法类似于scp,是直接通过ssh协议连接到服务器上,从remote的shell上建立通道,发送数据。 两个冒号的用法是说服务器将rsync作为服务启动,这样协议不再是ssh,而是走的rsync协议,两个冒号跟的是rsync服务配置的路径模块。
-u 如果一个文件在destination被修改的话,我们可能并不希望使用来自source的老文件去覆盖修改
-d 使用-d想想将只从source到destination同步文件夹的tree structure,下面的例子,只会递归同步目录树,而目录中的文件不会同步
rsync -v -d thegeekstuff@192.168.200.10:/var/lib/ .
--delete 如果在source这一侧并不存在一个文件,而这个文件本身又在destination上存在,那么你可以指定删除这个文件,-delete选项完成这个功能

发表评论

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