zoukankan      html  css  js  c++  java
  • rsync文件同步详解

    此文为转载

    一.  环境和测试说明

    rsync(remote sync)是unix及类unix平台下的数据镜像备份软件,它不像FTP那样需要全备份,rsync可以根据数据的变化进行差异备份,从而减少数据流量,提高工作效率

    rsync主要分为三个配置文件,分别是rsyncd.conf(主配置文件),rsyncd.secrets(密码文件),rsyncd.motd(服务器信息文件)

    本文件以2台机器为列子进行说明

    pc1,IP:192.168.0.230,作为rsync服务器,需要配置rsyncd.conf文件

    pc2,IP:192.168.0.234,作为rsync客户端,不需要配置rsyncd.conf,文件可为空

    在服务器端创建/common目录作为共享目录,复制一些测试文件到该目录中,进行测试

    yum -y install rsync   #centos默认安装了

    mkdir /common; cp /etc/init.d/* /common/

    二. 主配置文件说明

    vim /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/rsyncd.secrets    #密码验证文件名,该文件权限要求为只读,建议为600,仅在设置auth users后有效

    hosts allow = 192.168.0.0/255.255.255.0   #设置哪些主机可以同步数据,多ip和网段之间使用空格分隔

    hosts deny=*    #除了hosts allow定义的主机外,拒绝其他所有

    list = false    #客户端请求显示模块列表时,本模块名称是否显示,默认为true

    三. 创建密码文件,防火墙设置,客户端和服务器端都要做如下操作

    echo "tom:123" > /etc/rsyncd.secrets

    echo "jerry:123" >> /etc/rsyncd.secrets

    chmod 600 /etc/rsyncd.secrets

    echo "welcome to access" > /etc/rsyncd.motd  #此项客户端不需要做

    rsync --daemon    # --daemon表示后台执行,客户端开启rsync不需要--daemon选项

    echo "/usr/bin/rsync --daemon" >> /etc/rc.local    #开机启动rsync服务

    firewall-cmd --permanent --add-port=873/tcp    #添加防火墙规则,允许873端口的数据访问

    四. 客户端同步数据

    yum -y install rsync

    rsync -vzrtopg --progress tom@192.168.0.230::common /test     #通common模块指定的/common目录下的文件拷贝到本客户端的/test目录下

    参数说明

    v:显示详细信息

    z:传输过程中对数据进行压缩

    r:递归

    t:保留修改时间属性

    o:保留文件所有者属性

    p:保留文件权限属性

    g:保留文件所属组属性

    a:归档模式,主要保留文件属性,等同于-rlptgoD

    --progress:显示数据传输的进度信息

    --password-file=FILE:指定密码文件,将密码写入文件,实现非交互式数据同步,这个文件名也需要修改权限为600

    --delete:删除那些仅在目标路径中存在的文件(源路径中不存在),在脚本中的数据同步经常加上此参数   

    --list-only:仅列出服务器模块列表,需要rsync服务器设置list=true

    五.  rsync语法格式,SRC表示源路径,DEST表示目标路径

    1. 本地复制

    rsync [选项] SRC... [DEST]

    2. 通过远程shell复制

    下载数据:rsync [选项] [user@a]HOST:SRC...[DEST]     #不加user@表示用root用户进行登陆远程主机下载数据到 本地的DEST路径

    上传数据:rsync[选项] SRC...[user@]HOST:DEST   #这里的SRC表示本地数据,DEST表示远端主机目录

    3. 通过rsync进程复制

    下载数据

    rsync [选项] [user@] HOST::SRC ... [DEST]    #这里双冒号后的SRC表示远端服务端的模块名

    rsync [选项] rsync://[user@]HOST[:port]/SRC...[DEST]   #这里的SRC表示实际的同步目录名,这种方式可以指定端口

    上传数据

    rsync [选项] SRC...[user@]HOST::DEST    #上传本地客户端数据到远端服务端的DEST模块名指定的路径

    rsync [选项] SRC...rsync://[user@HOST[:port]/DEST

    一些例子

    1. rsync -t *.c 192.168.0.54:src/        #将本机当前目录下的以.c结尾的文件赋值到192.168.0.54的src目录下

    2. rsync -avz 192.168.0.54:src/bar /data/tmp     #从192.168.0.54主机上将src/bar目录以递归方式复制到本机/data/tmp目录

    3. rsync -avz 192.168.0.54:src/bar/ /data/tmp   #和例子2的区别是不在/data/tmp目录下创建bar目录

    4. rsync -avz /src/foo /dest    #将本机/src/foo目录复制到/dest目录

    5. rsync -avz tom@192.168.0.230::common /test3    #使用tom账户连接远程192.168.0.230主机的rsync进程,将common模块定义的path路径下载到本地test3目录

    6. rsync -avz 192.168.0.230::common /test3     #匿名下载192.168.0.230服务器的common模块至本地的/test3目录

    7. rsync --list-only tom@192.168.0.254::    #显示192.168.0.254服务器所有的模块名称,需要服务器端配置list=true才会显示

    8. 客户端每次连接服务器都需要输入密码很麻烦,可以创建密码文件rsync.pass,在其中包含密码,然后使用--password-file指定此文件

    echo "123" > rsync.pass   #服务器端用户tom的密码

    rsync -avz --delete --password-file=rsync.pass tom@192.168.0.254::common /dest

    六. 编写简单shell脚本,使客户端定期对rsync服务器(192.168.0.230)的数据进行备份

    #!/bin/bash

    export PATH=/bin:/usr/bin:/usr/local/bin

    SRC=common #模块名

    DEST=/data

    server=192.168.0.230

    user=tom

    passfile=/root/rsync.pass

    #if the DEST directory not found, then create one

    [ ! -d $DEST ] && mkdir $DEST

    [ ! -e $passfile ] && exit 2

    rsync -az --delete --password-file=$passfile ${user}@${server}::$SRC $DEST/$(data +%Y%m%d)   #加上日期

    之后在定时任务中加入执行此脚本即可

    七. 附加

    ubuntu上做rsync同步可参考   https://www.linuxidc.com/Linux/2016-08/134584.htm

    delete参数的例子 参考:https://www.cnblogs.com/wangmo/p/7151175.html

  • 相关阅读:
    AGC037F Counting of Subarrays
    AGC025F Addition and Andition
    CF506C Mr. Kitayuta vs. Bamboos
    AGC032D Rotation Sort
    ARC101F Robots and Exits
    AGC032E Modulo Pairing
    CF559E Gerald and Path
    CF685C Optimal Point
    聊聊Mysql索引和redis跳表
    什么是线程安全
  • 原文地址:https://www.cnblogs.com/shetao/p/15384966.html
Copyright © 2011-2022 走看看