一、可以用于备份的几种服务
1.Rsync
Rsync为linux中常用的文件同步服务(备份服务)
支持本地计算机与远程计算机之间,或者两个本地目录之间同步文件~
2. Scp
是基于linux系统中的ssh协议实现安全的远程文件复制命令
3. rcp
远程文件复制,可以使在两台Linux主机之间的文件复制操作更简单
‘以上三种方法均支持在不同计算机上进行文件传输or备份工作‘
‘差异如下‘
1. Rcp传输过程中是不加密的,存在安全因素(此文不详细说明)
2. Scp为rcp的加强版,即传输过程中是加密的(但scp不支持增量备份)
3. Rsync支持增量备份,可与corn定时任务配合进行数据备份or同步
# 全量备份--差异备份--增量备份 区别
1. 全量备份
每次把原始数据完整复制一份 # 备份
只需要找到对应时间点的那一份备份数据覆盖回来即可 # 恢复
2. 差异备份
每次备份都是拿当前数据与第一次全量数据作比较,找出差异,然后备份 # 备份
第一次的全量备份+对应时间节点的那一个差异备份即可 # 恢复
3. 增量备份
每次备份都是拿当前数据与上一次备份(包含全量、差异、增量备份)做比较,然后备份发生变化的文件 # 备份
第一次的全量备份+第二次增量+第三次增量+第三次增量..... # 恢复
二、Scp命令及参数详解
1. Scp使用格式如下
scp 本地文件 用户名@服务器IP:目录 # 上传文件/推
[root@rsync ~]# scp init.sh root@172.16.5.3:/root/test
scp 用户名@服务器IP:目标文件 本地目录 # 下载文件/拉
[root@rsync ~]# scp root@172.16.5.3:/root/test/init.sh .
2. Scp常用参数如下
-r: 以递归方式复制
-P: 指定远程主机的端口号(默认使用的是ssh的22)
-p: 保留源文件的修改时间、访问时间和访问权限
-C: 允许压缩(将-C标志传递给ssh,从而打开压缩功能)
-v: 详细方式显示输出
-l: limit--限定用户所能使用的带宽,以Kbit/s为单位
.......
3. 小练习
‘不指定用户名,将本地文件下的111.txt上传到172.16.5.3服务器的/root/test目录下‘
[root@rsync ~]# scp 111.txt 172.16.5.3:/root/test
# 冷知识
‘scp较之rsync对于系统资源的占用是非常少的‘
‘当小文件众多情况下,rsync会导致硬盘I/O较高,而scp基本上不影响系统正常运行‘
三、Rsync详解
3.1 Rsync简介
# rsycn简称叫做远程同步,可以实现不同主机之间的数据同步,还支持全量和增量
# rsync监听端口:873
# rsync官方地址:https://rsync.samba.org/
3.2 Rsync特性
1. 支持拷贝特殊文件,如链接文件、设备等
2. 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能
3. 可以做到保持原文件或目录的权限、时间、软硬链接等所有属性均不改变
4. 可以实现增量同步,只同步发生变化的数据,因此数据传输效率很高
5. 可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)
6. 可以通过socket(进程方式) 传输文件和数据(服务端和客户端)
7. 支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像
3.3 Rsync传输模式
1. 本地方式---类似于cp,只是单纯的复制
2. 远程方式---类似于scp,当然scp只支持全量备份,rsync支持增量备份
3. 守护进程方式---客户端和服务端
3.4 Rsync常用参数如下
1. Rsync常用参数如下:
-a #归档模式传输, 等于-tropgDl -t -r -o -p -g -D -l
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN #指定排除不需要传输的文件
--exclude-from=file #排除不需要的文件
--bwlimit=100 #限速传输---以M为传输单位
--partial #断点续传
--delete #让目标目录和源目录数据保持一致
--password-file=xxx #使用密码文件
--port #指定端口传输
3.5 Rsync守护进程传输模式实践
本文主要讲解rsync的守护进程使用方式
1. 为什么要用守护进程方式?
(1) rsync传输时,使用的是系统用户和系统用户的密码,安全性很弱
(2) 使用普通用户会出现权限问题
(3) 在不需要使用增量备份的情况下,使用cp(本地)以及scp(远程)更方便一些
主机名 IP地址 角色
client 172.16.5.3 rsync客户端
rsync 172.16.5.52 rsync服务端
--------------------------------‘服务端配置‘--------------------------------
# 安装rsync
[root@rsync ~]# yum -y install rsync
# 清空rsync配置文件
[root@rsync ~]# >/etc/rsyncd.conf
# 编辑配置文件
[root@rsync ~]# vim /etc/rsyncd.conf
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 = rsync_backup # 定义虚拟用户(rsync传输过程中使用的用户)
secrets file = /etc/rsync.passwd # 定义虚拟用户的密码
log file = /var/log/rsyncd.log # 日志文件
#####################################
[backup] # 模块
comment = welcome to oldboyedu backup! # 模块的备注
path = /backup # 服务器存放文件的真实路径
# 创建rsync服务所需要的用户(-s指定默认登录bash,-M不创建用户家目录)
[root@rsync ~]# useradd rsync -M -s /sbin/nologin
# 创建虚拟用户rsync_backup的密码文件
[root@rsync ~]# echo "rsync_backup:666666" > /etc/rsync.passwd
# 更改虚拟用户密码文件的权限(600)
[root@rsync ~]# chmod 600 /etc/rsync.passwd
# 创建备份目录
[root@rsync ~]# mkdir /backup
# 更改备份目录的属主与属组
[root@rsync ~]# chown -R rsync.rsync /backup/
# 关闭各种防火墙
[root@rsync ~]# systemctl stop firewalld
[root@rsync ~]# setenforce 0 # 临时关闭selinux,如需永久关闭,修改/etc/selinux/config
# 启动服务
[root@rsync ~]# systemctl start rsyncd
# 查看rsync服务启动状态
[root@rsync ~]# netstat -ltnp
[root@rsync ~]# ps aux | grep [r]sync
--------------------------------‘客户端配置‘--------------------------------
# 安装rsync
[root@client ~]# yum -y install rsync
# 创建认证文件并修改权限(此文件可在使用rsync时附带上充当密码文件)
[root@client ~]# echo "666666" > /etc/rsync.passwd
[root@client ~]# chmod 600 /etc/rsync.passwd
-------------------------------‘客户端测试‘--------------------------------
1. 密码验证方式
# 将本地1.txt上传到服务端的backup目录下----手动输入密码验证
[root@client rsync_client]# rsync -avz 1.txt rsync_backup@172.16.5.5::bac
kup
# 使用上述客户端配置的密码文件进行验证
[root@client rsync_client]# rsync -avz 2.txt rsync_backup@172.16.5.5::backup --password-file=/etc/rsync.passwd # 不需要手动输入密码了
# 添加环境变量进行验证----不需要手动输入密码
[root@client rsync_client]# export RSYNC_PASSWORD=666666
[root@client rsync_client]# rsync -avz 3.txt rsync_backup@172.16.5.5::backup
-------------------------------‘Rsync参数测试‘-------------------------------
‘ -exclude-frome=file 排除不需要的文件‘
[root@client rsync_client]# touch txt{1..10}
[root@client rsync_client]# cat 1.txt
txt2
txt4
txt6
txt8
txt10
[root@client rsync_client]# rsync -avz ./* rsync_backup@172.16.5.5::backup --exclude-from=1.txt # 排除了1.txt文件里面包含的文件,即只会同步txt1,txt3.....
‘-bwlimit=10 限速传输‘
[root@client rsync_client]# dd if=/dev/zero of=./1.txt bs=1M count=1000 # 生成1G的文件
[root@client rsync_client]# rsync -azvP 1.txt rsync_backup@172.16.5.5::backup --bwlimit=10 # 限速每秒10M传输
‘delete数据一致(无差异同步)‘
[root@client rsync_client]# ls # 查看客户端数据
txt5 txt6 txt7 txt8 txt9
# 执行数据一致同步
[root@client rsync_client]# rsync -avz ./ rsync_backup@172.16.5.5::backup --delete
# 查看服务端数据信息
[root@rsync backup]# ls
txt5 txt6 txt7 txt8 txt9
# 注意!!---在客户端操作时
拉取时: 客户端数据与服务端数据一致,以服务端数据为准
推送时:服务端数据与客户端数据一致,以客户端数据为准