备份介绍;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}"
原文地址:https://www.cnblogs.com/caodan01/p/14684259.html