zoukankan      html  css  js  c++  java
  • 备份介绍;scp;rsync远程同步及守护进程搭建;增量备份

    一 储备知识

    1、备份

    备份就是把重要的数据复制一份到其他位置保留起来
    

    2、三种备份方案

    • 全量
    备份数据:
    	每次都把原数据完整copy一份
    
    恢复数据:
    	只需要找到对应时间点的那一份备份数据覆盖回来就即可
    
    • 差异
    备份数据:
    	每次备份都是用当前数据跟第一次全量备份比较,找出差异,然后备份
    	
    恢复数据:
    	第一次的全量备份+对应时间节点的那一个差异备份即可
    
    • 增量
    备份数据:
    	每次备份都是用当前数据跟上一次的数据进行比较,找出差异,然后备份
    		
    恢复数据:
    	全量备份+增量1+增量2+增量3..。
    

    3、为何要备份

    运维三大职责
    - 应用程序7*24*365不间断运行=>围绕三层,做好监控
    - 备份=>数据丢失情况下,保证数据可以恢复回来
    - 优化性能:提升用户访问速度
    备份什么===重要数据
    

    二 scp 基于ssh验证

    scp -r 源路径 目标路径

    上传/推
    scp -r /aaa/* root@192.168.15.41:/bbb
    
    下载/拉
    scp -r root@192.168.15.41:/bbb/* /aaa
    

    三 rsync 远程同步

    语法

    rsync 选项  源路径   目标路径
    

    选项

    -a 归档模式,表示递归传输并保持文件属性
    -r 递归拷贝
    -z 传输时进行压缩提高效率
    -v 显示rsync过程中详细信息
    -n 现实哪些文件将被传输 测试
    -c 打开效验开关,强制对文件传输进行校验(内网无需校验)
    -R 相对路径模式  rsync -a -R /a/b/c /dst/ 从a开始    rsync -a -R /a/./b/c /dst/从b开始拷
    --delete   目标多出来的文件会删掉
    --exclude   排除
    --exclude-from=file  文件名所在的目录文件
    --partial   断点续传
    --bwlimit=100  限速传输
    --password-file=xxx  使用密码文件
    --backup  同名的文件不会被覆盖,会默认以~后缀命名保存
        rsync -a --backup /111/ /222/
        rsync -a --backup --suffix=".bak" /111/ /222/  把~后缀改成.bak后缀
    --backup-dir  将备份文件存放在目录下
        rsync -a --backup --backup-dir=/222/bak目录 /111源/ /222目标/        
    --include  包含 
    
    rsync -a --include="*.txt" --exclude="*" /111/ /222/
    

    既能本地拷贝

    rsync -av 源路径 目标路径
    
    mkdir /src
    mkdir /dst
    
    echo 111 > /src/1.txt
    echo 222 > /src/2.txt
    
    rsync -a /src /dst  # 代表把源文件夹拷贝到/dst下
    rsync -a /src/ /dst   # 代表把源文件夹下的子文件全拷贝过去/dst
    stat /dst/*
    
    rsync -a /src/ /dst 
    stat /dst/*  # 时间不变
    
    echo 666 >> /src/1.txt
    rsync -a /src/ /dst 
    stat /dst/*
    

    也能远程传输

    本地与远程均需要安装rsync
    yum install rsync -y
    # 远程模式
    1、ssh协议
    (1)在本地与目标主机都安装rsync
    (2)远程主机要打开sshd服务
    (3)需要用到的账号是远程主机可登录系统账号---》不安全
    (4)不受目录限制-------------------------》不安全
    
    2、rsync协议
    (1)在本地与目标主机都安装rsync
    (2)远程主机要打开rsync守护进程
    	rsync --daemon
    	systemctl start rsyncd
    (3)用到的虚拟账号
    注意:
    - 1、当前登录用户是谁,进程的权限就是谁
    - 2、配置中的uid控制远程链接过来的客户端的身份
    
    (4)用的是模块名-》具体的目录
    

    如何使用rsync协议传输

    在传输时,如果未指定协议,则默认用ssh协议,指定使用rsync协议的方式有两种

    方式一:rsync://协议(默认端口873)
    $ rsync -az /test/ rsync://dandan@192.168.15.61:873/module
    
    方式二:远程目标前面使用连续两个冒号
    $ rsync -az   /test/ dandan@192.168.15.61::module
    

    远程传输需要经过验证才可以,验证方式有两种

    1、ssh认证、协议
    (1)本地与远程都需要安装rsync软件
    (2)远程主机需要开启sshd服务
    (3)需要用到的账号是远程主机的系统账号密码---》不安全
    (4)不受文件夹的限制---》不安全
    
    2、基于rsync-daemon(即快又安全)
    (1)本地与远程都需要安装rsync软件
    (2)远程主机不需要开启sshd服务,但是远程主机需要开启rsync守护进程
    (3)修改好配置
    
    rsync原理
    rsync远程传数据可以简单总结为三步
    1、先验证用户身份
    2、检查源路径到底需要传哪些文件,默认quick check算法
    3、传输
    
    rsync总结
    1、耗费cpu资源
    2、源路径下如果是频繁改动的,rsync不适合,比如数据库文件
    3、不适合同步大文件
    

    守护进程模式搭建

    1.环境准备

    本地与远程均执行下述两条命令

    setenforce 0
    iptables -F
    或者立即关闭防火墙 systemctl disable --now firewalld
            关闭selinux: sed -i '/^SELINUX=/c SELINUX=disable' /etc/selinux/config
    
    

    2.安装rsync(本地和远程主机都要装)

    [root@reomte ~]# yum install rsync -y
    

    3.在服务端远程主机配置并启动守护进程

    [root@reomte ~]# vim /etc/rsyncd.conf
    uid = rsync 
    gid = rsync  
    port = 873 
    fake super = yes 
    use chroot = no  
    max connections = 200  
    timeout = 600  
    ignore errors  
    read only = false  
    list = false  
    auth users = dandan  
    secrets file = /etc/rsync.passwd 
    log file = /var/log/rsyncd.log  
    #####################################
    [xxx]  
    comment = "备份文件的目录"   
    path = /dandan_bak 
    
    解释:
    uid = rsync#虚拟用户dandan对应的就是该用户的权限,限制的是客户端的权限,登录成功后,会转成uid指定的身份
    gid = rsync #虚拟用户dandan对应的就是该组的权限,限制的是客户端的权限。登录成功后,转成的组身份
    port = 873 #端口
    fake super = yes #设置成yes,则代表uid可以不为root
    use chroot = no #安全机制
    max connections = 200 #最大连接数,0表示没有限制
    timeout = 600 #超过时间,确保rsync服务器不会永远等待一个崩溃的客户端,0表示永远等待
    ignore errors #忽略错误
    read only = false #关闭只读
    list = false #查看模块列表
    auth users = dandan #指定虚拟用户,传输时使用该用户会对应到真实系统用户rsync的权限
    secrets file = /etc/rsync.passwd #指定虚拟用户的密码文件
    log file = /var/log/rsyncd.log #日志文件
    #####################################
    [xxx] #模块名,对应的实际目录为/dandan_bak
    comment = "备份文件的目录"  #备注
    path = /dandan_bak  #真实文件目录
    

    创建启动守护进程时用到的用户与组

    [root@reomte ~]# useradd rsync -s /sbin/nologin -M
    

    配置虚拟用户dandan的密码文件

    [root@reomte ~]# echo "dandan:123" > /etc/rsync.passwd
    [root@reomte ~]# chmod 600 !$
    

    为模块xxx创建真实的目录

    [root@reomte ~]# mkdir /dandan_bak
    [root@reomte ~]# chown -R rsync.rsync /dandan_bak/
    

    启动守护进程

    [root@reomte ~]# rsync --daemon #启动rsync服务,以独立监听服务的方式(守护进程)运行
    [root@reomte ~]# systemctl start rsyncd
    [root@reomte ~]# netstat -lntp  #验证启动
    

    其他机制

    # 客户端设置远程主机的密码
    [root@local ~]# vim /etc/a.pwd
    1              #只存一个密码的数字
    [root@local ~]# chmod 600 /etc/a.pwd
    [root@local ~]# rsync -az /test/ dandan@192.168.15.71::xx模块 --password-file=/etc/a.pwd
    或者
    [root@local ~]# export RSYNC_PASSWORD=1    #非交互设置密码,固定用法,写脚本用
    [root@local ~]# rsync -az /test/ @dandan@192.168.51.71::xx模块 
    

    四 增量备份

    rsync的最大特点就是它可以完成增量备份,除了源目录与目标目录直接比较,rsync还支持使用--link-dest参数用来指定同步时的基准目录,即将源目录与基准目录之间变动的部分,同步到目标目录

    [root@reomte ~]# mkdir /data
    [root@reomte ~]# mkdir /bak
    [root@reomte ~]# echo 1111 > /data/1.txt
    [root@reomte ~]# echo 2222 > /data/2.txt
    [root@reomte ~]# ls /data/
    1.txt  2.txt
    [root@reomte ~]# rsync -a /data/ /bak/11
    [root@reomte ~]# echo 3333 > /data/3.txt
    [root@reomte ~]# rsync -a --delete --link-dest /bak/11 /data/ /bak/22
    [root@reomte ~]# ls /bak/22
    1.txt  2.txt  3.txt
    [root@reomte ~]# echo 666 >> /data/1.txt
    [root@reomte ~]# rsync -a --delete --link-dest /bak/22 /data/ /bak/33
    [root@reomte ~]# ls -i /data/
    67925664 1.txt  67925665 2.txt  67925666 3.txt
    [root@reomte ~]# ls -i /bak/11
    202391325 1.txt  202391326 2.txt
    [root@reomte ~]# ls -i /bak/22
    202391325 1.txt  202391326 2.txt    1363118 3.txt
    [root@reomte ~]# ls -i /bak/33
     67925668 1.txt  202391326 2.txt    1363118 3.txt
    
    $ rsync -a --delete --link-dest /bak/11 /data/ /bak/22
    
    上面命令中,--link-dest参数指定基准目录/bak/11,然后源目录/data/跟基准目录/data/进行比较,找出变动的文件,将它们拷贝到目标目录/bak/22
    那些没变动的文件则会生成硬连接,硬链接指向上一个/bak/22中的文件。这个命令的第一次备份时是全量备份,后面就是增量备份了
    

    下面是一个脚本示例,备份/opt目录

    #!/bin/bash
    set -o errexit 
    set -o nounset
    
    set -o pipefail
    
    SOURCE_DIR="/data/"
    TARGET_START_DIR="/bak/"
    TARGET_DIR="${TARGET_START_DIR}/$(date '+%Y-%m-%d_%H:%M:%S')" 
    
    LATEST_LINK="${TARGET_START_DIR}/latest"
    
    mkdir -p "${TARGET_START_DIR}" 
    
    rsync -a --delete 
     "${SOURCE_DIR}/" 
     --link-dest "${LATEST_LINK}" 
     "${TARGET_DIR}"
    
    rm -rf "${LATEST_LINK}"
    ln -s "${TARGET_DIR}" "${LATEST_LINK}"
    
  • 相关阅读:
    chr(9) chr(10) chr(13) chr(32)
    分割字符串
    日期提取函数EXTRACT
    数据泵在本地导出数据到远程数据库中
    CEIL与FLOOR
    GROUPING SETS与GROUP_ID
    LISTAGG
    AVG
    COUNT
    Scala 泛型类型和方法
  • 原文地址:https://www.cnblogs.com/caodan01/p/14684259.html
Copyright © 2011-2022 走看看