zoukankan      html  css  js  c++  java
  • 使用rsync备份数据

    (1).实验环境与目标

      源主机:youxi1  192.168.5.101

      目标主机:youxi2  192.168.5.102

      目标:将源主机youxi1的数据备份到youxi2上。

      rsync是C/S模式,默认端口873

    (2).rsync命令常用格式与常用选项、

    常用格式:

      rsync [OPTION] SRC [USER@]HOST:DEST  //源主机执行的推送数据命令,需要目的主机执行守护进程

      rsync [OPTION] SRC [USER@]HOST::DEST  //与上一条命令类似,但使用的是非系统用户,并且需要配置文件

      rsync [OPTION] [USER@]HOST:SRC [DEST]  //目的主机执行的拉取数据命令,需要源主机执行守护进程

      rsync [OPTION] [USER@]HOST::SRC [DEST]  //与上一条命令类似,但使用的是非系统用户,并且需要配置文件

    常用选项:

    -a,--archive 存档模式,相当于-rlptgoD
    -z,--compress 传输过程中压缩数据
    -v,--verbose 复杂输出信息
    --delete 删除目标中存在,而源中不存在的文件
    --password-file=FILE 从FILE中读取密码

      注意:-z选项适合杂碎文件的传输,如果是单个大文件传输并不适合使用此选项

    (3).实验

    1)检查是否安装了rsync和xinetd

    [root@youxi2 ~]# yum list installed | grep xinetd
    xinetd.x86_64                         2:2.3.15-13.el7                  @base    
    [root@youxi2 ~]# yum list installed | grep rsync
    rsync.x86_64                          3.1.2-6.el7_6.1                  @updates
    

      如果以上命令没有输出结果,那么请使用yum -y install xinetd rsync安装两个程序,并systemctl enable [服务名]设置为开机自启。

    2)两台主机上创建同名用户,密码可以不一样

       在主机youxi1上添加rsync1用户,密码为101101

    [root@youxi1 ~]# useradd rsync1
    [root@youxi1 ~]# echo "101101" | passwd --stdin rsync1
    更改用户 rsync1 的密码 。
    passwd:所有的身份验证令牌已经成功更新。

      在主机youxi2上添加rsync1用户,密码为102102

    [root@youxi2 ~]# useradd rsync1
    [root@youxi2 ~]# echo "rsync1:102102" | chpasswd
    

    3)在主机youxi1上创建源文件夹,并给rsync1添加权限

    [root@youxi1 ~]# mkdir -p /www/html
    [root@youxi1 ~]# setfacl -m u:rsync1:rwx /www/html  //目录设置ACL权限,如果存在文件或目录,可以使用-R选项遍历赋权
    [root@youxi1 ~]# setfacl -m d:u:rsync1:rwx /www/html  //目录设置默认ACL权限,新建的文件或目录将继承默认ACL权限
    [root@youxi1 ~]# getfacl /www/html                
    getfacl: Removing leading '/' from absolute path names
    # file: www/html
    # owner: root
    # group: root
    user::rwx
    user:rsync1:rwx
    group::r-x
    mask::rwx
    other::r-x
    default:user::rwx
    default:user:rsync1:rwx
    default:group::r-x
    default:mask::rwx
    default:other::r-x
    

      拷贝一些数据作为测试

    [root@youxi1 ~]# cp -r /var/* /www/html/
    [root@youxi1 ~]# ls /www/html/
    adm    crash  empty  gopher    lib    lock  mail  opt       run    tmp
    cache  db     games  kerberos  local  log   nis   preserve  spool  yp

    4)在主机youxi2上创建目的文件夹

    [root@youxi2 ~]# mkdir -p /backup/www/html
    [root@youxi2 ~]# chown rsync1:rsync1 /backup/www/html/
    [root@youxi2 ~]# ls -ld /backup/www/html/
    drwxr-xr-x 2 rsync1 rsync1 6 5月  15 11:16 /backup/www/html/
    

    5)从主机youxi1上将数据推送到主机youxi2上

      推送数据,命令会在源主机youxi1上执行,那么相应的需要目的主机youxi2监听。

      目的主机youxi2执行监听(守护进程)

    [root@youxi2 ~]# rsync --daemon
    [root@youxi2 ~]# netstat -antup | grep 873       
    tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      1824/rsync          
    tcp6       0      0 :::873                  :::*                    LISTEN      1824/rsync 
    

      源主机youxi1执行推送命令

    [root@youxi1 ~]# rsync -avz /www/html/ rsync1@192.168.5.102:/backup/www/html/
    rsync1@192.168.5.102's password:

      最后到目的主机youxi2上查看是否成功

    [root@youxi2 ~]# ls /backup/www/html/
    adm    crash  empty  gopher    lib    lock  mail  opt       run    tmp
    cache  db     games  kerberos  local  log   nis   preserve  spool  yp

    6)当然也可以在主机youxi2上拉取youxi1上的数据

      拉取数据,命令会在目的主机youxi2上执行,那么相应的需要源主机youxi1监听

      源主机youxi1执行监听(守护进程)

    [root@youxi1 ~]# rsync --daemon
    [root@youxi1 ~]# netstat -antup | grep 873
    tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      1947/rsync          
    tcp6       0      0 :::873                  :::*                    LISTEN      1947/rsync    
    

      目的主机youxi2执行拉取命令

    [root@youxi2 ~]# rsync -avz rsync1@192.168.5.101:/www/html/ /backup/www/html/
    rsync1@192.168.5.101's password:
    

      最后查看目的主机youxi2上是否成功

    [root@youxi2 ~]# ls /backup/www/html/
    adm    crash  empty  gopher    lib    lock  mail  opt       run    tmp
    cache  db     games  kerberos  local  log   nis   preserve  spool  yp
    

    (4).使用非系统用户备份数据

    1)配置文件说明

      rsync的配置文件是/etc/rsyncd.conf,在执行rsync守护进程时调用。配置文件内分为全局参数和模块参数。

      常见全局参数:

    port 指定端口号,默认873。
    uid 指定传输文件时守护进程应该具有的uid,默认为nobody。配合gid可以确定访问权限。
    gid 指定传输文件时守护进程应该具有的gid,默认为nobody。
    max connections 指定最大连接数,默认为0,也就是没有限制。
    lock file 指定支持max connections参数的锁文件,默认为/var/run/rsyncd.lock。
    motd file 指定提示文件,连接时显示文件内容给连接者,默认没有。
    log file 指定rsync的日志文件,而不将日志发送给syslog。
    pid file 指定rsync的pid文件,一般指定为/var/run/rsyncd.pid,存放进程ID的文件位置。
    hosts allow 指定允许同步的客户机地址,可以是IP地址也可以是网段
    

      常见模块参数:

    comment 对模块的描述,默认没有。
    path 指定提供给模块的目录,必须指定。
    read only 如果值是yes表示只允许下载,no既可以加载也可以上传
    exclude 指定多个由空格隔开的文件或目录,不上传或下载(即不可访问),相当于命令中的--exclude=PATTERN或-f,--filter=RULE。
    exclude from从指定文件中读取exclude文件或目录列表,换行符分隔。
    include 指定不排除符合要求的文件或目录,相当于命令中的--include=PATTERN。
    include from从指定文件读取include文件或目录列表,换行符分隔。
    auth users 指定允许连接该模块的用户名列表,用空格或逗号分隔,与系统用户无关。用户名和密码以明文方式存在在secrets file参数的文件中。
    secrets file 指定包含“username:password”对的文件,换行符分隔,只有auth users参数被指定,才生效。
    hosts allow 指定允许同步的客户机地址,可以是IP地址也可以是网段
    list 设定当请求使用模块列表时,该模块是否被列出。false隐藏,默认值为true显示
    timeout 超时时间,默认为0,没有超时时间。理想数值600。
    

    2)使用非系统用户从源主机youxi1上将数据推送到目标主机youxi2上

      在目标主机youxi2上配置rsync.conf

    [root@youxi2 ~]# cat /etc/rsyncd.conf 
    uid = root  //运行进程的用户
    gid = root  //运行进程的组
    address = 192.168.5.102  //监听地址
    port = 873  //监听端口号
    hosts allow = 192.168.5.101/24  //允许同步的IP地址
    use chroot = yes  //是否锁定家目录,rsync被黑后,黑客无法在rsync运行的家目录之外创建文件。
    max connections = 5  //最大连接数
    pid file = /var/run/rsyncd.pid  //进程ID存放文件,自动生成
    lock file = /var/run/rsync.lock  //max connections参数的锁文件
    log file = /var/log/rsyncd.log  //日志文件位置
    motd file = /etc/rsyncd.motd  //提示信息存放文件位置
    [backupwwwhtml]  //模块名
    path = /backup/www/html  //模块运行路径
    comment = backup /www/html/  //描述
    read only = false  //上传下载权限
    list = yes  //允许查看模块信息
    auth users = rsync2  //非系统用户名
    secrets file = /etc/rsync.passwd  //存放密码文件
    

      在目标主机youxi2上创建密码文件,并限制权限

    [root@youxi2 ~]# cat /etc/rsync.passwd 
    rsync2:102102
    [root@youxi2 ~]# chmod 600 /etc/rsync.passwd
    

      启动rsync的守护进程,并指定使用/etc/rsyncd.conf配置文件

    [root@youxi2 ~]# rsync --daemon --config=/etc/rsyncd.conf
    [root@youxi2 ~]# netstat -antup | grep rsync
    tcp        0      0 192.168.5.102:873       0.0.0.0:*               LISTEN      1384/rsync   

      在目标主机youxi2上添加端口号

    [root@youxi2 sysconfig]# firewall-cmd --permanent --zone=public --add-port=873/tcp
    success
    [root@youxi2 sysconfig]# firewall-cmd reload
    success

      最后在源主机youxi1上执行推送命令

    [root@youxi1 ~]# rsync -avz /www/html/ rsync2@192.168.5.102::backupwwwhtml
    
    Password:
    

    3)使用非系统用户在目标主机youxi2上拉取源主机youxi1的数据

      在源主机youxi1上配置rsync.conf

    [root@youxi1 ~]# cat /etc/rsyncd.conf 
    uid = root
    gid = root
    address = 192.168.5.101
    port = 873
    hosts allow = 192.168.5.102/24
    use chroot = yes
    max connections = 5
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    motd file = /etc/rsyncd.motd
    [backup]
    path = /www/html
    comment = backup /www/html
    read only = no
    list = yes
    auth users = rsync3
    secrets file = /etc/rsync.passwd
    

      在源主机youxi1上创建密码文件,并限制权限

    [root@youxi1 ~]# cat /etc/rsync.passwd 
    rsync3:101101
    [root@youxi1 ~]# chmod 600 /etc/rsync.passwd
    

      启动rsync的守护进程,并读取配置文件/etc/rsyncd.conf

    [root@youxi1 ~]# rsync --daemon --config=/etc/rsyncd.conf
    [root@youxi1 ~]# netstat -antup | grep rsync
    tcp        0      0 192.168.5.101:873       0.0.0.0:*               LISTEN      2188/rsync  
    

      在源主机youxi1上添加端口

    [root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port=873/tcp
    success
    [root@youxi1 ~]# firewall-cmd --reload 
    success
    

      在目标主机youxi2上执行拉取命令

    [root@youxi2 ~]# rsync -avz rsync3@192.168.5.101::backup /backup/www/html/
    
    Password:
    

      注意:如果不想每次备份数据都输入一次命令,或需要进行定时计划任务,可以使用--password-file=FILE选项,将密码保存到文件中使用选项调用。

  • 相关阅读:
    shell脚本的常用参数
    Qt中使用Protobuf简单案例(Windows + msvc)
    使用PicGo和Typora写Markdown
    CentOS7安装protobuf(C++)和简单使用
    protobuf编译、安装和简单使用C++ (Windows+VS平台)
    protocol buffers 文档(一)-语法指导
    Base64编码和其在图片的传输的应用
    Qt程序打包发布
    Qt中的Label和PushButton背景图自动缩放设置
    TCP的粘包和拆包问题及解决
  • 原文地址:https://www.cnblogs.com/diantong/p/10864616.html
Copyright © 2011-2022 走看看