专注做网管的电脑公司
  • 微信公众号
  • 联系我们
  • 客服热线:13726442969
  • rsync使用详解

    2020-08-19 15:37:38 370

    1.rsync本地模式及参数总结

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    本地拷贝,相当于cp
    -e,使用通道协议;
    -v,--verbose详细模式输出;
    -z,--compress传输时进行压缩以提高传输效率;
    -a,--archive归档模式,以递归方式传输文件,并保持所有文件属性,相当于-rtopgD
    -r,--recursive对子目录以递归模式;
    -o,--owner保持文件属主;
    -p,--perms保持文件权限;
    -g,--group包吃文件属组信息;
    --exclude=PATTERN,指定排除不需要传输的文件模式;
    --exclude-from=file
    --bwlimit=RATE
    --delete,让目标目录和源目录数据一致.
     
    rsync -avz /etc/hosts/mnt/
    # /tmp1/是一个空目录,下面命令会导致清空/mnt目录
    rsync -avz --delete /tmp1/ /mnt/
    # 下面两条命令的执行结果是不一样的,带斜线是只拷贝目录中的文件,
    # 不带斜线是将目录和文件一起拷贝到目标目录
    rsync -avz  /tmp1/ /mnt/
    rsync -avz  /tmp1 /mnt/

    2.rsync实现不同主机拷贝数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    2.rsync实现不同主机拷贝数据
    rsync -az /etc/hosts* -e 'ssh -p 22' root@10.0.0.31:/mnt
    # 会出现解析慢的情况
    Address 10.0.0.31 maps to localhost, but this does not map back to the address
     - POSSIBLE BREAK-IN ATTEMPT!
    # 修改目标主机的ssh配置文件
    vi /etc/ssh/sshd_config
    GSSAPIAuthentication no
    UseDNS no

    3.服务器端、客户端的操作和配置

    服务器端

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    vim /etc/rsyncd.conf
    # uid是运行进程的用户,客户端通过验证后使用rsync用户访问共享目录,
    # 默认是nobody,用默认也行,系统安装完之后,是存在这个用户的
    uid = rsync
    gid = rsync
    use chroot = no
    max connections = 200
    timeout = 300
    pid file /var/run/rsyncd.pid
    lock file /var/run/rsyncd.lock
    log file /var/log/rsyncd.log
     
    [backup]
    path = /backup
    ignore errors
    read only = false
    list = false
    hosts allow = 172.16.1.0/24
    # hosts deny = 0.0.0.0/32  二选一
    auth users = rsync_backup  # 独立于系统账号之外的虚拟用户
    secrets file /etc/rsync.password
     
    # auth users在man手册中有说明:
    This usernames do not need to exists on the local system.
     
    # 该文件中的用户名作用:验证客户端是否有资格登录服务器端
    vi /etc/rsync.password
    rsync_backup:oldboy
     
    useradd -M -s /sbin/nologin rsync
    mkdir /backup
    ls -ld /backup
    drwxr-xr-x 2 root root 4096 Nov 26 00:38 /backup
    # 如果这个目录的权限不是rsync而是root,
    # 那么客户端通过验证之后以rsync用户访问该目录就会没有权限
    chown rsync.rsync /backup/ 
    drwxr-xr-x 2 rsync rsync 4096 Nov 26 00:38 /backup
    chmod 600 /etc/rsync.password  # 必须修改权限
    rsync --daemon
    echo "/usr/bin/rsync --daemon" >> /etc/rc.local

    客户端

    客户端密码文件中只有密码

    1
    2
    3
    4
    5
    6
    7
    vi /etc/rsync.password
    oldboy
    chmod 600 /etc/rsync.password
    如果没有缩小权限,那么还是会让你输入密码:
    password file must not be other-accessible
    continuing without password file
    Password:

    客户端的拉取(pull)和推送(push)

    1
    2
    3
    4
    5
    6
    7
    推送:
    rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
    rsync -avz /backup/ rsync://rsync_backup@172.16.1.41/backup/ --password-file=/etc/rsync.password
    拉取:
    rsync -avz rsync_backup@172.16.1.41::backup /backup/ --password-file=/etc/rsync.password
    rsync -avz rsync://rsync_backup@172.16.1.41/backup/  /backup/ --password-file=/etc/rsync.password
    提示:上述的backup是模块名,不是路径

    4.多模块配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    cp /etc/rsyncd.conf{,.bak}
    mkdir -p /data/{nginx,mysql}
    chown -R rsync.rsync /data/
     
    vi /etc/rsyncd.conf
    uid = rsync
    gid = rsync
    use chroot = no
    max connections = 200
    timeout = 300
    pid file /var/run/rsyncd.pid
    lock file /var/run/rsyncd.lock
    log file /var/log/rsyncd.log
    ignore errors
    read only = false
    list = false
    hosts allow = 172.16.1.0/24
    # hosts deny = 0.0.0.0/32
    auth users = rsync_backup
    secrets file /etc/rsync.password
     
    [web]
    path = /data/nginx
     
    [mysql]
    path = /data/mysql
     
    客户端命令:
    rsync -avz /backup/ rsync_backup@172.16.1.41::web --password-file=/etc/rsync.password
    rsync -avz /backup/ rsync_backup@172.16.1.41::mysql --password-file=/etc/rsync.password

    5.排除及无差异同步

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 排除单个文件
    rsync -avz --exclude=stu01 /backup/ rsync_backup@172.16.1.41::mysql --password-file=/etc/rsync.password
    # 排除多个文件,一般用来排除日志
    rsync -avz --exclude={stu01,stu02} /backup/ rsync_backup@172.16.1.41::mysql --password-file=/etc/rsync.password
    touch {01..10}.log
    rsync -avz --exclude=*.log /backup/ rsync_backup@172.16.1.41::mysql --password-file=/etc/rsync.password
    # 如果文件名连续的话可以这样
    rsync -avz --exclude={01..10}.log /backup/ rsync_backup@172.16.1.41::web --password-file=/etc/rsync.password
    # 无差异同步,即:使用参数--delete
    # 让服务器端和客户端保持一模一样,但实际情况是服务器端保存着远多于客户端的数据,所以此参数慎用.
     
    优点:增量备份,利用通道模式可以ssh加密传输;
    缺点:大量小文件同步时间可能较长,进程可能会停止,较大文件可能会中断.