rsync数据备份
1.rsync概述
rsync(remote synchronizetion)具有本地和远程两台主机之间的数据快速复制同步镜像和远程备份的功能类似于scp命令,但scp每次都是全量拷贝,而rsync可以增量拷贝。
rsync的监听端口:873,rsync运行架构:C/S(Client/Sever)
2.备份类型
1.全量备份:
每一次都是将数据全部备份出来
2.增量模式:
基于上一次的备份,将新增的数据备份出来
3.差异备份:
基于全量备份,将后面新增的数据备份出来
3.rsync传输模式
1.本地模式:
单个主机之间的数据传输,类似于cp命令:
语法:
rsync [选项] 源文件 目标路径
2.远程模式:
通过ssh通道在两台主机中传输数据,类似于scp命令
语法:
拉:rsync [选项] [用户名@]主机IP:源文件路径 本机目录
推:rsync [选项] 本机的源文件 [用户名@]主机IP:目标路径
3.守护进程模式:
把rsync当成服务启动
语法:
拉:rsync [选项] [用户名@]主机IP::配置文件中的模块名 本机目录
推:rsync [选项] 本机源文件 [用户名@]主机IP::配置文件中的模块名
4.使用守护进程的好处
1.守护进程不需要ssh协议,服务启动后自带端口
2.守护进程可以设置匿名用户,不需要使用系统用户
5.rsync选项
-a:归档模式传输,等于-tropgDl
-t(time):保持文件的时间信息
-r:递归拷贝
-o(owner):保持文件的属主信息
-g(group):保持文件的属组信息
-p(perm):保持文件的权限信息
-D(device):保持设备文件的信息
-l(link):保留软链接
-v:显示同步过程
-P:显示进度
-L:保留软链接指向的目标文件
--exclude=PATTERN:排除指定的文件模式
--exclude-form=file:排除指定的文件
--bwlimit=1:限速传输
--partial:断点续传
--delete:数据同步
--password-file=:指定密码文件
6.rsync备份实战
先准备两台主机:
主机名 |
WanIP |
LanIP |
角色 |
web01 |
10.0.0.7 |
172.16.1.7 |
rsync客户端 |
backup |
10.0.0.41 |
172.16.1.41 |
rsync服务端 |
6.1服务端操作
1.先安装rsync:yum install -y rsync
2.配置rsync的配置文件: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 = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[backup]
comment = welcome to oldboyedu backup!
path = /backup
3.创建配置文件中的系统用户:
useradd rsync -s /sbin/nologin -M
4.创建服务端的密码文件:
1.vim /etc/rsync.passwd
rsync_backup:123
2.echo 'rsync_backup:123'>/etc/rsync.passwd
5.修改密码文件的权限为600:
chmod 600 /etc/rsync.passwd
6.创建备份目录:
mkdir /backup
7.修改目录的属主和属组:
chown rsync:rsync /backup/
8.启动rsync服务并加入开机自启:
systemctl start rsyncd
systemctl enable rsyncd
9.检查服务进程和服务端口:
ps -ef|grep [r]sync
netstat -lnutp|grep 873
6.2客户端操作
1.安装rsync:yum install -y rsync
2.客户端创建密码文件(客户端的密码文件只需要写密码):
1.vim /etc/rsync.passwd
123
2.echo '123'>/etc/rsync.passwd
3.修改客户端的密码文件的权限:
chmod 600 /etc/rsync.passwd
4.推数据检测服务端是否能够接受到数据:
rsync -avz /tmp rsync_backup@172.16.1.41::backup --password- file=/etc/rsync.passwd
5.也可以使用环境变量免交互输入密码:
export RSYNC_PASSWORD=123
rsync -avz /tmp rsync_backup@172.16.1.41::backup
6.3客户端推数据报错情况
推:rsync [option..] 原文件 [用户名@]主机IP::模块名
rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup
[root@web01 ~]
Password: @ERROR: auth failed on module backup rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
1.用户输入错误
2.密码输入错误
3.密码文件的权限不是600
[root@web01 ~]
@ERROR: Unknown module 'bak' rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
1.模块名不认识
[root@web01 ~]
rsync: failed to connect to 172.16.1.41 (172.16.1.41): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]
无法和172.16.1.41rsync服务建立连接
1.防火墙和selinux开启
2.服务没有启动
3.服务的端口更改
6.4排错过程
服务端
1.检测配置文件是否错误:
cat /etc/rsyncd.conf
2.检查密码文件的权限是否更改:
ll /etc/rsync.passwd
3.检查密码文件中的用户名是否和配置文件中的一致
4.检查模块目录的属主和属组是否是配置文件中uid和gid指定的一样
客户端
1.检查命令用户名是否跟服务端的配置文件的用户名一致:rsync_backup
2.检查命令中的模块名是否跟服务端配置文件的模块名一致:backup
3.如果有密码文件,则检查权限是否为600
4.检查密码文件中的内容
5.检查环境变量中的密码是否和服务端里的密码文件保持一致
7.企业级备份案例
7.1.环境准备
主机名 |
WanIP |
LanIP |
角色 |
web01 |
10.0.0.7 |
172.16.1.7 |
rsync客户端 |
nfs |
10.0.0.31 |
172.16.1.31 |
rsync客户端 |
backup |
10.0.0.41 |
172.16.1.41 |
rsync服务端 |
7.2.先决条件
1.时间同步
crontab -e
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com >/dev/null
2.关闭防火墙和selinux:
systemctl stop firewalld:临时关闭
systemctl disable firewalld:永久关闭
setenforce 0:临时关闭
sed -i 's#selinux=enforcing#selinux=disabled#g' /etc/sysconfig/selinux:永久关闭
7.3.客户端需求
1.客户端提前准备存放的备份的目录,目录规则如下: /client_backup
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至 /client_backup 包名: nfs_172.16.1.31_2022-05- 16.tar.gz
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
7.4.服务端需求
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
7.5.脚本实现客户端需求
bak="/client_backup"
host_name=`hostname`
IP=`ifconfig eth1 |awk 'NR==2{print $2}'`
date_time=`date +%F`
export RSYNC_PASSWORD=123
mkdir -p $bak
cd /etc && tar -zcf
$bak/${host_name}_${IP}_${date_time}.tar.gz passwd
cd $bak && \
md5sum ${host_name}_${IP}_${date_time}.tar.gz > ${host_name}_${IP}_${date_time}.md5
rsync -avz $bak/ rsync_backup@172.16.1.41::backup
find $bak -type f ! -mtime -7|xargs rm -f
7.6脚本实现服务端的需求
1.服务端部署rsync,用于接收客户端推送的数据: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 = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[backup]
comment = welcome to oldboyedu backup!
path = /backup
2.配置邮件
2.1:安装发邮件服务:yum install -y mailx
2.2:修改配置文件:vim/etc/mail.rc
set bsdcompat
set from=发送邮件的邮箱
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=发送邮件的邮箱
set smtp-auth-password=授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
4.编写脚本:
bak="/backup"
host_name=`hostname`
date_time=`date +%F`
cd ${bak} && \
md5sum -c *${date_time}.md5|mail -s "${date_time}_数据备份校验" 管理员邮箱
服务端只保留180天的备份数据
find $bak -type f ! -mtime -180 |xargs rm -f
7.8 将脚本放入到定时任务中
crontab -e
00 01 * * * /bin/sh /root/backup.sh > /dev/null
crontab -e
01 01 * * * /bin/bash /root/check_md5.sh > /dev/null
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异