1 什么是rsync?(理论)

  • 简而言之主要特点就是实现全量与增量,本地和远程的数据备份工具,同样适用于windows。

  • 官网

  • rsync 在本地目录之间还能实现rm删除的功能

  • 他根据文件和修改时间大小来同步

  • 也可以根据权限不同来备份,需指定参数

2 特点(理论)

  • 能有排除功能

  • 能保持源目录和文件的时间权限和软连接属主等属性

  • 能配合ssh通道来加密

  • 可以作为服务,让客户端来连

  • 支持匿名和支持认证

3 工作方式(理论)

  • 本地之间传 类似cpmingl

  • 借助ssh

  • 守护进程方式(重要)

4实例用途(操作)

(1)客户端模式

本地环境:

  1.    传文件 rsync /etc/hosts /opt

  2.    传目录  rsync -avz /opt /mnt  <==相当于 cp -ap /opt /mnt

##注意/opt后的/加和不加的区别,很重要加了/只是把下面的文件过去,不加的话连自己opt都过去了,如果记不住就自己测试下

远程环境:

  1.    推送(传过去):rsync -avz /etc/hosts -e “ssh -p 22000”

  2.    拉取(从远端主机传过来):rsync –avz  /etc/ -e “ssh -p 22000”

##记忆命令方法:本地目录 ---》》远程 ----》通过什么方式 -e “ssh -p22000”

(2)守护进程模式

配置服务端rysnc

    Vi /etc/rsyncd.conf里的内容

uid = rsync      

gid = rsync      
use chroot = no      
max connections = 200      
timeout = 100      
pid file = /var/run/rsyncd.pid      
lock file = /var/run/rsync.lock      
log file  = /var/log/rsyncd.log      
[oldboy]      
path = /oldboy/      
ignore errors      
read only = false      
list =  false      
hosts allow = 199.101.117.0/24      
hosts deny = 0.0.0.0/32      
auth users = rsync_backup      
secrets file = /etc/rsync.password

##如果在windows下编辑或者复制的编码到linux下就最好用这个命令处理下Dos2unix /etc/rsyncd.conf

mkdir /oldboy

useradd rsync -s /bin/nologin –M                             ## 新建个账户(和配置文件的uid-gid对应,此账户属性不能登录并且没目录)

chown -R rsync.rsync /oldboy                                 ##(重要)

echo “rsync_backup:oldboy”> /etc/rsync.password   ##rsync_backup是虚拟账户,到时候客户端连接就用这个账户和密码oldboy。

chmod 600 /etc/rsync.password                                ##设置成别人都不能看到,因为里面有密码

rsync --daemon  #启动进程

##以上配置结束,下面是辅助的管理rsync的操作命令

lsof -i :873                                                           ##查看rsync服务是否起来

pkill  rsync                                                           ##杀掉进程

killall rsync                                                           ##但不一定杀掉 判断杀掉否就再执行一次,提示no programs killed就说明对了

ps -ef |grep rsync

##客户端配置:只要这两步即可

echo “oldboy”>/etc/rsync.password                         #这个路径和服务端路径没任何关系,为了规范而已,密码必须和服务那相同

chmod 600 /etc/rsync.password

##当配置好服务和客户端后的一个生产环境实例:客户端备份一个网站/var/ww/html

1.cd /var/www                                                       #要备份哪个目录就先到他上一层目录

2.tar zcvf html_$(date +%F) ./html

#两种方法任意一种都可以

(模块法)

(1)rsync -avzhtml_xxx.tar.gz rsync_backup@64.78.172.::oldboy --password-file=/etc/rsync.password

(协议法)

(2)rsync -avz html_xxx.tar.gz rsync://rsync_backup@64.78.172.119/oldboy --password-file=/etc/rsync.password  

##必须是服务端配置的这个目录/oldboy,换其他目录就推送不成功,但是子目录是可以的/oldboy/test,记得要授权chown rsync test这个子目录

## 排错经验:如果连不上拒绝报错,telnet 端口测试,基本都是服务端口没开;Telnet 成功后想退出用ctrl +]

##如果提示报错no space这种说明一是容量不够,2是inode满了,用du -sh /* 来看哪个目录最大就最有可能有可疑,再进这个目录du -sh *

##服务端的rsync.password 权限是root root,里面内容是rsync_backup:oldboy

##手动一个个命令执行一次看出错在哪一步