文章目录

一、备份

1、什么是备份

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

2、三种备份方式

#全量
备份数据:每次都把原数据完整copy一份
恢复数据:只需要找到对应时间点的那一份数据覆盖回来即可



#差异备份
备份数据:每次备份都是用当前数据跟第一次全量备份比较,找出差异,然后备份
恢复数据:第一次的全量备份+对应时间节点的那一份备份即可


#增量备份

02@rsync服务的配置及使用_运维

3、常用备份工具

cp :复制(可以,但没必要  本地备份)
scp :远程备份
rsync

二、**scp **

#scp基于ssh验证

#格式 scp -r 源路径 目标路径

#两种方式

三、**Rsync **

1、什么是Rsync

rsync是一款开源,快速,多功能的可实现增量的本地或远程的数据镜像同步备份的优秀工具。适用于多个平台。从软件名称可以看出来是远程同步的意思(remote sync)。可使本地主机不同分区或目录之间及本地和远程两台主机之间的数据快速同步镜像,远程备份等功能。

在同步备份时,默认情况下,rsync通过其独特的“quick check”算法,仅同步大小或者最后修改时间发生变化的文件或目录(也可根据权限,属主等变化同步,需要制定参数)。甚至是只同步一个文件里变化的内容部分,所以可以实现快速的同步数据的功能。

提示:传统的cp,scp工具拷贝每次均为完整拷贝,而rsync除了完整拷贝,还具备增量拷贝的功能,因此从此性能及效率上更胜一筹。

2、Rsync的特性

1)支持拷贝特殊文件如链接,设备等

2)可以有排除指定文件或目录同步的功能,相当于打包命令tar

3)可以保持原来文件或目录的权限,时间,软硬链接等所有属性均不改变。

4)可实现增量同步,即只同步发生变化的数据,因此数据传输效率更高

5)可以使用rcp,rsh,ssh等方式来配合传输文件,也可以通过直接的socker链接

6)支持匿名的或认证的进程模式传输,方便进行数据备份及镜像。

3、rsync原理:

rsync远程传数据可以简单总结为三步
1、先验证用户身份
2、检查源路径到底需要传哪些文件,默认quick check算法
3、传输

4、rsync总结

1、耗费cpu资源
2、源路径下如果是频繁改动的,rsync不适合,比如数据库文件
3、不适合同步大文件

四、Rsync的传输方式与工作模式

1、传输方式

push 推:
从客户端将数据推送至服务端

pull 拉:
客户端将数据拉取到本地

2、选项(参数)

rsync -av --exclude='xxx/*' /111/ /222/ #备份到/222/时排除/111/子文件夹/xxx/下的所有文件

--delete#无差别同步,目标多出来会删掉

--include#包含

rsync -a --include="*.txt" --exclude="*" /111/ /222/ #备份/111/下包含以.txt结尾的文件到/222/

-R #备份时目录时,指示备份的路径的位置,指示使用当前路径位置进行备份

--backup #指示备份增量的文件,无增量的文件进行创建硬链接
rsync -a --backup /opt/q/ /opt/w

--backup --backup-dir #指示有备份增量的文件,需要备份增量文件的目录名称


--backup --suffix=".bak" #备份增量文件时,指示备份文件的后缀
rsync -a --backup --suffix=".bak"

3、工作模式

1)本地模式

#语法:
rsync [OPTION...] SRC... DEST
rsync #备份命令
[options] #选项
SRC... #本地源文件
DEST #目标地址
#语法实列
[root@1 ~]# rsync -av /aaa/ /bbb/

#命令拆分
rsync #命令
-av #选项
/aaa/ #源文件
/bbb/ #目标位置

#类似于cp,但是cp是全量复制但会修改文件属性,rsync是增量复制,会保证文件属性不变

2)远程方式

1> 推送数据

rsync [OPTION]... SRC[SRC]... [USER@]HOST:DEST

#实例
[root@1 ~]# rsync -az /111/ root@192.168.88.100:/222/

#语法拆分
rsync #命令
-az #选项
/111/ #当前服务器的本地文件
root #远端服务器的系统用户
@ #分隔符
192.168.88.100 #远端主机的IP地址
: #分隔符,代表主机下的xxx
/222/ #远程主机的目录

2>.拉取数据

#语法:
rsync [OPTION]... [USER@]HOST::SRC[DEST]

#语法实例
[root@1 ~]# rsync -az root@192.168.88.100:/222/ /111/

#语法拆分
rsync #命令
-az #选项
root #系统用户
@ #分隔符
192.168.88.100 #远程主机的地址
: #分隔符,代表主机下的xxx
/222/ #远程主机的目录及文件
/111/ #当前主机的当前目录

4、守护传输模式

1)准备环境

主机

IP

主机角色

1

192.168.88.100

rsync客户端

backup

192.168.88.41

rsync服务端

2)为什么使用守护进程模式

1.rsync传输时,使用的系统用户和系统用户的密码,非常的不安全
2.使用普通用户又会出现权限问题

3)安装rsync与准备

# yum install rsync -y
# 两台机器上都要安装

# 远程与本地
# setenfore 0
# systemctl stop firewalld

4)配置rsync

#编辑配置文件
[root@backup ~]# cat /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 = cc
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[xxx]
comment = "备份文件的目录"
path = /cc_bak

#配置文件详解
uid = rsync #启动服务的用户id
gid = rsync #启动服务的用户组id
port = 873 #服务器默认监听端口
fake super = yes #无须使用root用户启动
use chroot = no #安全机制
max connections = 200 #最大连机数
timeout = 600 #超时时间
ignore errors #忽略错误
read only = false #只读权限
list = false #查看模块列表
auth users = cc #定义虚拟用户(rsync传输过程使用的用户)
secrets file = /etc/rsync.passwd #定义虚拟用户的密码
log file = /var/log/rsyncd.log #日志文件
#####################################
[xxx] #模块
comment = "备份文件的目录" #模块的备注
path = /cc_bak #服务器真实的路径

5)根据配置文件操作

1.创建用户
[root@backup ~]# useradd rsync -s /sbin/nologin(不登录) -M(不创建家目录)

2.创建密码文件(一定不能有空格)
[root@backup ~]# echo "cc:1" > /etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd

3.创建备份目录
[root@backup ~]# mkdir /cc_bak

4.授权备份目录
[root@backup ~]# chown -R rsync.rsync /cc_bak

6)启动服务

[root@backup ~]# rsync --daemon  #rsync开启守护进程模式


#验证启动
[root@backup ~]# netstat -an | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 30446/rsync
tcp6 0 0 :::873 :::* LISTEN 30446/rsync
[root@backup ~]# ps -ef | grep rsync
root 30446 1 0 21:29 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
root 30460 2626 0 21:31 pts/1 00:00:00 grep --color=auto rsync

7)强调

#1、服务端进程的用户身份,与当前登录用户有关
以什么用户提交的命令,该进程的身份就是该用户
即当前登录的用户是谁,进程的用户身份就是谁

#2、配置文件中的uid与gid是为了控制客户端的权限

五、rsync的远程模式

1、ssh协议
(1)在本地与目标主机都安装rsync
(2)远程主机要打开sshd服务
(3)需要用到的账号是远程主机可登录系统账号---》不安全
(4)不受目录限制-------------------------》不安全

2、rsync协议
(1)在本地与目标主机都安装rsync
(2)远程主机要打开rsync守护进程
rsync

六、远程传输的使用

[root@localhost /] rsync -az /opt/q/ rsync://egon@192.168.15.41:888/xxx

2.免密码登录(1)
[root@localhost /]# rsync -az /opt/w/ egon@192.168.15.41::xxx --passwd-file=/etc/rsync.passwd
#使用免密码登录,在指定的目录下先进行创建虚拟用户的密码文件

02@rsync服务的配置及使用_scp_02

3.免密码登录(2)

[root@localhost /]# export RSYNC_PASSWORD=1
[root@localhost /]# rsync -az /opt/w/ egon@192.168.15.41::xxx
#对远程密码进行使用命名进行传输,然后执行命令进行免密码登录

02@rsync服务的配置及使用_rsync_03

# 
命令 参数 备份前一次的目录 需要备份的目录 备份后的目录
rsync

02@rsync服务的配置及使用_服务器_04

七、远程传输(脚本)

mkdir /bak

TARGET_DIR=/bak/`date '%Y-%m-%d_%H:%M:%S'`

rsync -a --delete /data/ --link-dest /bak/latest $DIR

rm -rf /bak/latest
ln -s $DIR

八、 rsync+inotify实现实时同步(脚本)

#!/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}"