Linux rsync 同步

简介

  rsync (remote sync) 是unix及类unix平台下的数据镜像备份软件.不需要每次都全量备份. rsync可以根据数据的变化进行差异化备份.提高备份效率.减少数据流量.

 

语法参数

  Local

    rsync [OPTION...] SRC... [DEST]

  remote shell

    Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
    Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

  rsync daemon

    Pull:

      rsync [OPTION...] [USER@]HOST::SRC... [DEST]
      rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

    Push:

      rsync [OPTION...] SRC... [USER@]HOST::DEST
      rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

[OPTION]

  -v 详细模式输出
  -a 归档模式,递归的方式传输文件,并保持文件的属性,equals -rlptgoD
  -r 递归拷贝目录
  -l 保留软链接
  -p 保留原有权限
  -t 保留原有时间(修改)
  -g 保留属组权限
  -o 保留属主权限
  -D 等于--devices --specials 表示支持b,c,s,p类型的文件
  -R 保留相对路径
  -H 保留硬链接
  -A 保留ACL策略
  -e 指定要执行的远程shell命令
  -E 保留可执行权限
  -X 保留扩展属性信息 a属性
  --progress:显示数据传输的进度信息
  --password-file=FILE:指定密码文件,将密码写入文件,实现非交互式数据同步,这个文件名也需要修改权限为600
  --delete:删除那些仅在目标路径中存在的文件(源路径中不存在),在脚本中的数据同步经常加上此参数
  --list-only:仅列出服务器模块列表,需要rsync服务器设置list=true

 

本地同步

1. 本地数据同步的时候,源目录后面的“/”会影响同步的结果
      rsync -av /dir1/ /dir2    //只同步目录下面的文件到指定的路径
      rsync -av /dir1 /dir2        //将当前目录dir1和目录下的所有文件一起同步

2. -R:不管加不加"/",都会将源数据的绝对路径一起同步
     rsync -avR /dir1/ /dir2/
3. --delete:删除目标目录里多余的文件 rsync -avR --delete /dir1/ /dir2/

 

远程同步

Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
  
  rsync -av root@10.1.1.1:/backup /dir1  //同步远程机/backup下的所有文件到本地/dir1目录

Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
 
  rsync -av /dir1/test.tar.gz code@10.1.1.1:/home/code  //上传本地 /dir1/test.tar.gz 文件到远程 /home/code目录

 

服务同步

rsync --daemon  //开启rsync后台服务

 

配置文件 /etc/rsyncd.conf

  motd file = /etc/rsyncd.motd #设置服务器信息提示文件,在该文件中编写提示信息
  transfer logging = yes #开启rsync数据传输日志功能
  log file = /var/log/rsyncd.log #设置日志文件名,可通过log format参数设置日志格式
  pid file = /var/run/rsyncd.log #设置rsync进程号保存文件名称
  lock file = /var/run/rsync.lock #设置锁文件名称
  port = 873 #设置服务器监听的端口号,默认是873
  address = 192.168.0.230 #设置本服务器所监听网卡接口的ip地址
  uid = nobody #设置进行数据传输时所使用的帐户名或ID号,默认使用nobody
  gid = nobody #设置进行数据传输时所使用的组名或GID号,默认使用nobody
  #若为yes,rsync会首先进行chroot设置,将根映射在下面的path参数路径下,对客户端而言,系统的根就是path参数指定的路径。但这样做需要root权限,并且在同步符号连接资料时只会同步名称,不会同步内容。
  use chroot = no 
  read only = yes #是否允许客户端上传数据,yes表示不允许
  max connections =10 #设置并发连接数,0表示无限制
  [common] #自定义模块名,rsync通过模块定义同步的目录,可定义多个
  comment = web content #定义注释说明字串
  path = /common #同步目录的真是路径通过path指定
  ignore errors #忽略一些IO错误
  #exclude = test/ #exclude指定common目录下某个目录可以不同步数据
  auth users = tom, jerry #设置允许连接服务器的账户,此账户可以是系统中不存在的用户
  secrets file = /etc/rysncd.secrets #密码验证文件名,该文件权限要求为只读,建议为600,仅在设置auth users后有效
  hosts allow = 192.168.0.0/255.255.255.0 #设置哪些主机可以同步数据,多ip和网段之间使用空格分隔
  hosts deny=* #除了hosts allow定义的主机外,拒绝其他所有
  list = false #客户端请求显示模块列表时,本模块名称是否显示,默认为true

 

 

服务同步案例

需求

  将远程服务器的日志文件打包压缩后定时同步到本地备份服务器.

  要求

  1.远程服务器每天00:00打包一次日志文件.

  2.备份服务器每天00:05分pull一次数据.

实现

  服务器

  //1.创建备份日志文件夹. /back_log
   mkdir /back_log
  
//2.设置定时任务,每天00:00打包一次日志文件到/back_log    crontab -e    00 00 * * * /usr/bin/tar -zcvf /back_log/message_log.tar.gz /var/log/messages   //3.配置 /etc/rsyncd.conf 文件,配置服务模块.实现非交互式数据同步.     [messages_log]  #模块名称       path = /back_log/  #模块同步的目录全路径.       log file = /var/log/rsync.log  #同步日志文件       comment = messages log files  #描述文件       hosts allow = 218.17.xx.xx       uid = root  #后台程序使用root身份运行.       gid = root  #后台程序使用root用户组身份运行.       auth users = kenny   #配置允许登录的用户,非系统内置用户.       secrets file = /etc/rsyncd.secrets   #配置记录账户信息的文件,文件名称不限定.       hosts deny=*      #除了hosts allow定义的主机外,拒绝其他所有       transfer logging = yes    #开启rsync数据传输日志功能       pid file = /var/run/rsyncd.log    #设置rsync进程号保存文件名称   //4.创建--password-file文件并设置600权限.所属主和所属组要和执行后台程序的用户身份一致.    touch /etc/rsyncd.secrets    echo "kenny:12345" >> /etc/rsyncd.secrets    chmod 600 /etc/rsyncd.secrets

  
//5.开启 rsync 后台服务.    rsync --daemon

  
//6.查看服务状态.防火墙添加873端口.云服务器在安全组规则里面也要开放873端口.    netstat -nltp | grep "873"    firewall-cmd --add-port=873/tcp --permanent    firewall-cmd --reload

  客户端   
//1.创建备份日志文件夹    mkdir /back_messages_log
  
//2.创建--password-file文件.并设置600权限. 注意: 客户端文件只写入密码无需用户名.    touch /etc/rsyncd.secrets    echo "12345" >> /etc/rsyncd.secrets    chmod 600 /etc/rsyncd.secrets
  
//3.创建定时任务每天00:05分pull一次数据.    crontab -e    00 05 * * * /usr/bin/rsync -av kenny@218.17.xx.xx::messages_log /back_messages_log/

 

Linux rsync 同步

上一篇:Mac下安装lightgb并在jupyter中使用


下一篇:Linux screen命令详解