当前位置: 首页 > news >正文

防火墙环境下的全网服务器数据自动化备份平台搭建:基于 rsync 的完整实施指南

一、项目总览

1.内容介绍

本文以 3 台 CentOS 7.9 服务器(Web 服务器、NFS 服务器、备份服务器)为载体,详解如何在全防火墙开启的前提下,搭建一套自动化数据备份平台:每日自动打包 Web 站点、NFS 共享数据及系统关键配置,通过 rsync 增量同步至备份服务器,同时实现旧数据智能清理、备份完整性校验与邮件告警。

2.核心目标

  • 自动备份:Web/NFS 服务器每日 0 点自动打包关键数据(系统配置、网站目录、日志等),通过 rsync 推送到备份服务器;
  • 存储优化:本地保留 7 天备份,备份服务器保留 7 天内所有数据 + 6 个月内每周一数据;
  • 监控告警:备份完成后自动校验完整性,每日 8 点通过邮件发送成功 / 失败报告;
  • 防火墙兼容:仅开放 rsync(873)、SMTPs(465)等必要端口,保障安全性。

3.备份要点

  • 所有服务器统一备份目录:均为/backup,便于标准化管理;
  • Web 服务器需备份内容:
    • 系统配置:定时任务(/var/spool/cron/root)、开机自启脚本(/etc/rc.local)、运维脚本(/server/scripts);
    • 业务数据:网站目录(/www)、访问日志(/var/log/nginx);
    • 本地保留策略:仅保留 7 天备份,避免磁盘占满。
  • NFS 服务器需备份内容:
    • 系统配置:同 Web 服务器(定时任务、开机自启等);
    • 业务数据:共享目录(/nfsfile)、挂载状态日志(/var/log/mount.log)。
  • 备份服务器要求:
    • 按源服务器内网 IP 创建目录(如/backup/192.168.120.131),文件命名包含时间(如2025-08-07_Week04);
    • 保留 7 天内所有数据 + 6 个月内每周一数据(满足合规性与长期归档需求);
    • 每日校验备份完整性,通过邮件推送结果。

4.实施大纲

在这里插入图片描述

5.选择Rsync的原因:增量同步机制

在这里插入图片描述

  • 算法优势:仅传输文件差异块(delta编码),比全量传输快90%

  • 硬链接优化:–link-dest参数创建硬链接,节省存储空间

避坑点:

  • 权限问题:必须设置secrets file权限为600

  • 防火墙:需开放873端口(firewall-cmd --add-port=873/tcp --permanent)

  • 连接限制:配置文件中的max connections需根据服务器性能调整

6.软硬件环境清单

主机名IP地址硬件软件
web01192.168.120.131cpu:1颗2核
内 存:2GB
HDD:20GB
网 络:NAT
VmWare17
Centos7.9
nginx1.20
rsync3.1.2
nfs01192.168.120.132cpu:1颗2核
内 存:2GB
HDD:20GB
网 络:NAT
VmWare17
Centos7.9
nfs
rpcbind
rsync3.1.2
backup192.168.120.133cpu:1颗2核
内 存:2GB
HDD:20GB
网 络:NAT
VmWare17
Centos7.9
mailx12.5
rsync3.1.2

二、项目环境(所有服务器通用步骤)

项目拓扑图

在这里插入图片描述

1. 安装 CentOS 7.9 系统

通过 VmWare 17 创建 3 台虚拟机,配置如下:

  • 内存:2GB,硬盘:20GB,CPU:2 核
  • 镜像:CentOS-7-x86_64-DVD-2207-02.iso
  • 网络模式:NAT(确保三台机器在同一网段)

2.初始化系统(以web1为例,nfs1/backup步骤相同)

(1)关闭 SELinux(重启生效)

SELinux 是 Linux 的安全子系统,默认开启会严格限制文件访问权限,可能导致 rsync 同步、脚本执行失败。

# 永久关闭SELinux
[root@web1 ~]# sed -i '7s/enforcing/disabled/gp' /etc/selinux/config

(2)开启并配置防火墙

所有服务器均开启 firewalld,需按角色开放特定端口,既保障安全又不阻碍备份流程:

# 启动firewalld并设置开机自启  
[root@web1 ~]# systemctl enable --now  firewalld
# 验证防火墙状态(确保显示“active (running)”)  
[root@web1 ~]# systemctl status firewalld
# 开放SSH端口(远程管理必备) 
[root@web1 ~]# firewall-cmd --permanent --zone=public --add-service=ssh
# 允许本地回环地址(服务内部通信)
[root@web1 ~]# firewall-cmd --permanent --zone=public --add-interface=lo
# 重新加载规则(使配置生效) 
[root@web1 ~]# firewall-cmd --reload
# 验证规则(应包含“ssh”和“lo”) 
[root@web1 ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: ens32 losources: services: dhcpv6-client sshports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules: 

(3)配置时间服务器同步

多服务器协同工作时,时间不一致会导致定时任务执行偏差(如备份时间不同步),需通过 chrony 同步时间:

[root@web1 ~]# yum install chrony -y
# 启动服务并设置开机自启
[root@web1 ~]# systemctl enable --now chronyd
[root@web1 ~]# vim /etc/chrony.conf 
#配置阿里时间服务器(国内访问速度快,稳定性高)
server ntp.aliyun.com iburst
stratumweight 0
driftfile /var/lib/chrony/drift
rtcsync
makestep 10 3
bindcmdaddress 127.0.0.1
bindcmdaddress ::1
keyfile /etc/chrony.keys
commandkey 1
generatecommandkey
logchange 0.5
logdir /var/log/chrony# 重启服务使配置生效
[root@web1 ~]# systemctl  restart chronyd
# 验证同步结果(出现"*"表示成功同步到阿里服务器)
[root@web1 ~]# chronyc sources -v
210 Number of sources = 1.-- Source mode  '^' = server, '=' = peer, '#' = local clock./ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 203.107.6.88                  2   6    17     1  -1982us[-8372us] +/-   94ms

(4)配置静态 IP

动态 IP 可能导致服务器重启后 IP 变化,破坏 rsync 同步、NFS 挂载等依赖固定 IP 的服务:

主机名IP地址网关DNS
web1192.168.120.131192.168.120.2114.114.114.114
nfs1192.168.120.132192.168.120.2114.114.114.114
backup192.168.120.133192.168.120.2114.114.114.114

在这里插入图片描述

注意!!!别忘了使用以下命令,使配置生效(建议在虚拟机做)

[root@web1 ~]# nmcli connection reload
[root@web1 ~]# nmcli connection up ens32

(5)安装基础工具

安装常用工具:vim(编辑文件)、tree(目录树形展示)、tar(打包)、net-tools(网络工具)、rsync(同步)

[root@web1 ~]# yum install vim  tree tar net-tools rsync -y

(6)替换yum源

CentOS 默认 YUM 源在国内访问较慢,替换为阿里源可加速软件下载:

# 第一步:修改自带yum配置文件,使其失效
[root@web1 ~]# cd /etc/yum.repos.d/
[root@web1 yum.repos.d]# cd ..
[root@web1 etc]# rm -rf yum.repos.d/
[root@web1 etc]# mkdir yum.repos.d
[root@web1 etc]# cd yum.repos.d/
#xftp上传配置文件
[root@web1 yum.repos.d]# ls
Centos-7.repo
[root@web1 yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@web1 yum.repos.d]# yum makecache
[root@web1 yum.repos.d]# ls
Centos-7.repo  epel.repo

三、服务部署

1.Web服务器部署

(1)防火墙专项配置(开放 Web 和备份端口)

Web 服务器需开放 HTTP 端口(供外部访问网站)和 rsync 端口(向备份服务器推送数据):

[root@web1 ~]# firewall-cmd --get-default-zone
public
# 开放HTTP服务
[root@web1 ~]# firewall-cmd --permanent --zone=public --add-service=http
success
# 开放rsync端口(873端口,向backup推送备份数据)
[root@web1 ~]# firewall-cmd --permanent --zone=public --add-port=873/tcp
success
# 重新加载规则
[root@web1 ~]# firewall-cmd --reload
# 验证(应包含“http”和“873/tcp”)
[root@web1 ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: ens32 losources: services: dhcpv6-client http mountd sshports: 873/tcpprotocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules: 

(2)部署 Nginx Web 服务

[root@web1 ~]# yum install nginx -y > /dev/null && systemctl start nginx
[root@web1 ~]# systemctl status nginxActive: active (running) since 四 2025-08-07 18:24:12 CST; 22s ago
[root@web1 ~]# mkdir -p /www
[root@web1 ~]# cd /www
#xftp上传代码包(模拟实际业务)
[root@web1 www]# ls
sczl
[root@web1 www]# grep -n "/usr/share/nginx/html" /etc/nginx/nginx.conf
42:        root         /usr/share/nginx/html;
62:#        root         /usr/share/nginx/html;
# 定位到"root"配置行(默认第42行),替换为自定义目录
[root@web1 www]# sed -i '42s#/usr/share/nginx/html#/www/sczl#' /etc/nginx/nginx.conf
[root@web1 www]# systemctl enable --now nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@web1 www]# systemctl restart nginx
# 验证网站访问
[root@web1 www]# curl 192.168.120.131
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FullPage</title>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1">
<link type="text/css" rel="stylesheet" href="css/common.min.css" />
<link type="text/css" rel="stylesheet" href="css/font-awesome.css" />
<link rel="stylesheet" href="css/swiper-3.3.1.min.css">
<link rel="stylesheet" href="css/animate.min.css">
<link rel="stylesheet" href="css/style.css">

2.Nfs服务器部署

(1)防火墙专项配置(开放 NFS 和备份端口)

NFS 服务依赖 rpc-bind(端口 111)、mountd(动态端口)、nfs(端口 2049),需开放相关服务:

[root@nfs1 ~]# firewall-cmd --get-default-zone
public
# 开放rpcbind
[root@nfs1 ~]# firewall-cmd --permanent --zone=public --add-service=rpc-bind
success
# 开放NFS
[root@nfs1 ~]# firewall-cmd --permanent --zone=public --add-service=nfs
success
# 开放mountd
[root@nfs1 ~]# firewall-cmd --permanent --zone=public --add-service=mountd
success
# 开放rsync端口
[root@nfs1 ~]# firewall-cmd --permanent --zone=public --add-port=873/tcp
success
[root@nfs1 ~]# firewall-cmd --reload
success
[root@nfs1 ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: ens32 losources: services: dhcpv6-client mountd nfs rpc-bind sshports: 873/tcpprotocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules: 

(2)部署 NFS 服务

[root@nfs1 ~]# yum install rpcbind nfs-utils -y
# 启动服务并设置开机自启,注意启动顺序
[root@nfs1 ~]# systemctl enable --now rpcbind
[root@nfs1 ~]# systemctl enable --now nfs-server
# 创建共享目录并添加测试数据
[root@nfs1 ~]# mkdir -p /nfsfile
[root@nfs1 ~]# echo "张德帅长的真帅!!!" > /nfsfile/zds
[root@nfs1 ~]# chmod -R 777 /nfsfile
[root@nfs1 ~]# cat /nfsfile/zds 
张德帅长的真帅!!!
[root@nfs1 ~]# vim /etc/exports
# 说明:
# /nfsfile:共享目录;192.168.120.0/24:允许访问的网段;
# rw:读写权限;all_squash:将客户端用户映射为匿名用户;sync:同步写入磁盘(数据更安全)
/nfsfile   192.168.120.0/24(rw,all_squash,sync)
[root@nfs1 ~]# systemctl restart rpcbind
[root@nfs1 ~]# systemctl restart nfs-server# 在Web服务器验证NFS挂载(确保共享正常)
[root@web1 ~]# yum install nfs-utils -y
[root@web1 ~]# showmount -e 192.168.120.132
Export list for 192.168.120.132:
/nfsfile 192.168.120.0/24
[root@web1 ~]# mkdir /web_nfs
[root@web1 ~]# mount -t nfs 192.168.120.132:/nfsfile /web_nfs
[root@web1 ~]# ls /web_nfs/
zds
[root@web1 ~]# cat /web_nfs/zds 
张德帅长的真帅!!!

3.backup服务器部署

(1)防火墙专项配置(开放接收备份和邮件端口)

备份服务器需接收 rsync 同步数据(873 端口),并通过 SMTPs 发送邮件(465 端口):

[root@backup ~]# firewall-cmd --get-default-zone 
public
# 开放rsync端口(873,接收web01/nfs01的备份数据)  
[root@backup ~]# firewall-cmd --permanent --zone=public --add-port=873/tcp
success
# 开放SMTPs端口(465,向QQ邮箱发送告警邮件)  
[root@backup ~]# firewall-cmd --permanent --zone=public --add-port=465/tcp
success
[root@backup ~]# firewall-cmd --reload
success
[root@backup ~]# firewall-cmd --list-all
public (active)target: defaulticmp-block-inversion: nointerfaces: ens32 losources: services: dhcpv6-client sshports: 873/tcp 465/tcpprotocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules: 

(2)部署 rsync 服务端(接收备份数据)

rsync 服务端负责接收 Web/NFS 服务器的备份数据,需配置用户、权限、共享目录:

① 配置 rsync 服务
[root@backup ~]# vim /etc/rsyncd.conf
#配置内容
uid = rsync  			# 运行rsync的用户(非root,更安全)  
gid = rsync  			# 运行rsync的组  
use chroot = no  		# 关闭安全限制(简化配置)  
max connections = 200  	# 最大连接数  
timeout = 300  			# 超时时间(秒)  
pid file = /var/run/rsyncd.pid  	# 进程ID文件  
lock file = /var/run/rsync.lock  	# 锁文件  
log file = /var/log/rsyncd.log  	# 日志文件  
fake super = yes  		# 允许非root用户处理文件权限  [backup]  				# 模块名(客户端需指定此名称)  path = /backup  	# 存储备份数据的目录  ignore errors  		# 忽略传输错误  read only = false  	# 允许客户端写入  list = false  		# 禁止客户端查看模块列表  hosts allow = 192.168.88.0/24  		# 仅允许内网服务器访问  hosts deny = 0.0.0.0/32  			# 禁止其他网段  auth users = rsync  				# 认证用户(虚拟用户)  secrets file = /etc/rsync.password  # 密码文件路径  
②初始化 rsync 服务
# 创建rsync用户(无需登录权限)
[root@backup ~]# useradd -M -s /sbin/nologin rsync
# 创建备份目录并修改属主
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync /backup
# 验证服务 
[root@backup ~]# ps -ef | grep rsync
root       4037      1  0 19:02 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
root       4047   3325  0 19:02 pts/1    00:00:00 grep --color=auto rsync# 创建密码文件(格式:用户名:密码)
[root@backup ~]# echo "rsync:zds612612" > /etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# systemctl enable --now rsyncd

四、备份实施

1.脚本开发

(1)配置web1备份脚本

①配置web1客户端本地备份脚本
  • web服务器需要备份的目录:/var/log/nginx ; /www ; /var/spool/cron/root ;/etc/rc.local ; /server/scripts
[root@web1 ~]# mkdir -p /server/scripts
[root@web1 ~]# vim /server/scripts/backup.sh
#!/bin/bash#日期:2025-08-07
#作者:张德帅
#邮箱:3436804884@qq.com
#功能:定期备份网络服务器中的数据
#版本:V1.0# 定义日期格式(如2025-08-06_Week03,Week01=周一)
Date=$(date +%F_Week0%w)
# 获取本机IP(需与网卡名匹配,此处为ens32)
Host_IP=$(ifconfig ens32 | awk '/broadcast/{print $2}')
# 本地备份目录
Backup_Dir="/backup/"
# 备份服务器IP
Backup_Server_IP=192.168.120.133# 若本地备份目录不存在则创建(按IP分目录)
[ ! -d $Backup_Dir/$Backup_Server_IP  ] && mkdir -p $Backup_Dir/$Host_IP# 输出备份开始提示
echo ${Date}${Host_IP} "开始备份......"# 打包需备份的文件(分步骤确保完整性)
cd / &&\    # 切换到根目录,避免路径错误
# 打包定时任务配置(/var/spool/cron)
tar cf  ${Backup_Dir}${Host_IP}/sys_file_bak_${Date}_tar.gz     var/spool/cron &&\
# 追加开机自启配置(/etc/rc.d/rc.local)
tar rf  ${Backup_Dir}${Host_IP}/sys_file_bak_${Date}_tar.gz     etc/rc.d/rc.local &&\
# 追加脚本目录(/server/scripts)
tar rf  ${Backup_Dir}${Host_IP}/sys_file_bak_${Date}_tar.gz     server/scripts/ &&\
# 单独打包网站目录(/www)并压缩
tar zcf $Backup_Dir$Host_IP/www_${Date}_tar.gz                  www/ &&\
# 单独打包Nginx日志(/var/log/nginx)并压缩
tar zcf $Backup_Dir$Host_IP/nginx_log_${Date}_tar.gz            var/log/nginx/ &&\# 生成MD5校验值(用于验证备份完整性)
find ${Backup_Dir:-/tmp}   -type   f   -name   "*${Date}_tar.gz*"  |    xargs    md5sum   >    $Backup_Dir/$Host_IP/${Date}.flag# 推送备份到backup服务器(使用rsync协议)
rsync -az $Backup_Dir    rsync@${Backup_Server_IP}::backup    --password-file=/etc/rsync.password# 清理本地7天前的备份(避免磁盘占满)
find ${Backup_Dir:-/tmp}   -type   f   -name   "*.tar.gz"    -a   -name  "*flag*"   -mtime +7 |   xargs  rm -fecho "本地备份成功,备份文件已推送到备份服务器"
②配置 rsync 客户端认证(用于连接备份服务器)

Web 服务器作为 rsync 客户端,需配置密码文件以连接服务端:

[root@web1 ~]# vim /etc/rsync.password
# 客户端建立认证的文件密码如下:
zds612612
# 密码认证文件必须为600
[root@web1 ~]# chmod 600 /etc/rsync.password 
③测试备份脚本
[root@web1 ~]# bash /server/scripts/backup.sh 
2025-08-07_Week04192.168.120.131 开始备份......
本地备份成功,备份文件已推送到备份服务器#backup端操作
[root@backup ~]# cd /backup/
[root@backup backup]# ls
192.168.120.131
[root@backup backup]# tree 192.168.120.131/
192.168.120.131/
├── 2025-08-07_Week04.flag
├── F_week.flag
├── nginx_log_2025-08-07_Week04_tar.gz
├── nginx_log_F_week_tar.gz
├── sys_file_bak_2025-08-07_Week04_tar.gz
├── sys_file_bak_F_week_tar.gz
├── www_2025-08-07_Week04_tar.gz
└── www_F_week_tar.gz0 directories, 8 files

(2)配置nfs1备份脚本

  • nfs1客户端主机需要打包备份的内容:/nfsfile/ ; /var/log/message文件;mount -l 挂载信息
①编写备份脚本
[root@nfs1 ~]# mkdir -p /server/scripts
[root@nfs1 ~]# vim /server/scripts/backup.sh
#!/bin/bash#日期:2025-08-07
#作者:张德帅
#邮箱:3436804884@qq.com
#功能:定期备份nfs服务器中的数据
#版本:V1.0Date=$(date +%F_Week0%w)
Host_IP=$(ifconfig ens32 | awk '/broadcast/{print $2}')
Backup_Dir="/backup/"
Backup_Server_IP=192.168.120.133# 记录挂载信息(需备份)
mount -l > /var/log/mount.log[ ! -d $Backup_Dir/$Backup_Server_IP  ] && mkdir -p $Backup_Dir/$Host_IPecho ${Date}${Host_IP} "开始备份......"# 打包NFS相关文件
cd / &&\
tar cf  ${Backup_Dir}${Host_IP}/sys_file_bak_${Date}_tar.gz     var/spool/cron &&\
tar rf  ${Backup_Dir}${Host_IP}/sys_file_bak_${Date}_tar.gz     etc/rc.d/rc.local &&\
tar rf  ${Backup_Dir}${Host_IP}/sys_file_bak_${Date}_tar.gz     server/scripts/ &&\
# 打包NFS共享目录
tar zcf $Backup_Dir$Host_IP/www_${Date}_tar.gz                  nfsfile/ &&\
# 打包挂载日志 
tar zcf $Backup_Dir$Host_IP/nginx_log_${Date}_tar.gz            var/log/mount.log &&\
# 生成MD5校验值 
find ${Backup_Dir:-/tmp}   -type   f   -name   "*${Date}_tar.gz*"  |    xargs    md5sum   >    $Backup_Dir/$Host_IP/${Date}.flag
# 推送备份到backup 
rsync -az $Backup_Dir    rsync@${Backup_Server_IP}::backup    --password-file=/etc/rsync.password
# 清理本地7天前数据
find ${Backup_Dir:-/tmp}   -type   f   -name   "*.tar.gz"    -a   -name  "*flag*"   -mtime +7 |   xargs  rm -fecho "本地备份成功,备份文件已推送到备份服务器"
②配置 rsync 客户端认证(用于连接备份服务器)
[root@nfs1 ~]# echo "zds612612" > /etc/rsync.password
[root@nfs1 ~]# chmod 600 /etc/rsync.password 
[root@nfs1 ~]# ll /etc/rsync.password 
-rw------- 1 root root 10 87 20:15 /etc/rsync.password
③测试备份脚本
[root@nfs1 ~]# bash /server/scripts/backup.sh 
2025-08-07_Week04192.168.120.132 开始备份......
本地备份成功,备份文件已推送到备份服务器#backup端操作
[root@backup backup]# ls
192.168.120.131  192.168.120.132
[root@backup backup]# tree 192.168.120.132
192.168.120.132
├── 2025-08-07_Week04.flag
├── nginx_log_2025-08-07_Week04_tar.gz
├── sys_file_bak_2025-08-07_Week04_tar.gz
└── www_2025-08-07_Week04_tar.gz

2.校验告警

(1)编写旧数据清理脚本(/server/scripts/del_bak_data.sh)

#!/bin/bash#日期:2025-08-07
#作者:张德帅
#邮箱:3436804884@qq.com
#功能:清理旧备份:保留7天内所有数据+180天内每周一数据
#版本:V1.0Backup_Dir="/backup/"# 删除7天前的非周一数据(保留周一)
find ${Backup_Dir:-/tmp}  -type  f  -name  "*.tar.gz*"  !  -name   "*week01*"  -o   -name   "*flag*"  -mtime  +7  |  xargs  rm  -f# 删除180天前的所有数据(包括周一)
find ${Backup_Dir:-/tmp}  -type  f  -name  "*.tar.gz*"    -name   "*flag*"  -mtime  +180  |  xargs  rm  -f

(2)验证数据完整性(/server/scripts/send_mail.sh)

  • backup服务端针对客户端备份时的md5指纹数据,利用MD5命令进行验证,完成数据传输过程完整性验证。
[root@backup backup]# vim /server/scripts/send_mail.sh
#!/bin/bash#日期:2025-08-07
#作者:张德帅
#邮箱:3436804884@qq.com
#功能:验证备份完整性
#版本:V1.0Date=$(date +%F_Week0%w)
Backup_Dir="/backup/"
Check_log="/tmp/bak.log_$(date +%F)"  # 验证日志
Admin_Mail=3436804884@qq.com     # 管理员邮箱# 用MD5校验当天备份文件 
find  $Backup_Dir  -type  f  -name  "${Date}.flag" | xargs   md5sum  -c  >>  $Check_log# 发送邮件(若日志为空则提示错误) 
if [ -n "cat $Check_log"  ]
thenmail -s "$Date 备份数据信息"  $Admin_Mail  <  $Check_log
elseecho "$Date  备份数据错误,请检查"  >  $Check_logmail -s  "$Date  备份数据信息"  $Admin_Mail  <  $Check_log
fi# 备份日志
cp $Check_log{,.ori}  &&  > $Check_log

(3)配置邮件服务(基于 QQ 邮箱 SMTP)

[root@backup ~]# yum  install  mailx  -y
[root@backup ~]# mkdir -p /root/.certs
[root@backup ~]# cd  /root/.certs
[root@backup .certs]# echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
[root@backup .certs]# certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[root@backup .certs]# certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[root@backup .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt[root@backup .certs]# vim  /etc/mail.rc
# 最后一行后添加以下内容:
set from=3436804884@qq.com
set smtp=smtps://smtp.qq.com:465         
set smtp-auth-user=3436804884@qq.com
set smtp-auth-password=tf*********jge  
set smtp-auth=login
set nss-config-dir=/root/.certs/     
set ssl-verify=ignore  #测试邮件
[root@backup .certs]# echo  "testmail"  |  mail  -s  "testmail"  3436804884@qq.com

3.定时任务

(1)web服务器配置定时任务(每天 0 点自动备份)

[root@web1 ~]# crontab  -e
* * * * * /bin/sh  /server/scripts/backup.sh > /dev/null  2>&1
[root@web1 ~]# crontab  -l
* * * * * /bin/sh  /server/scripts/backup.sh > /dev/null  2>&1
[root@web1 ~]# systemctl enable --now crond

(2)web服务器配置定时任务(每天 0 点自动备份)

[root@nfs1 ~]# crontab -e
* * * * * /bin/sh  /server/scripts/backup.sh > /dev/null  2>&1
[root@nfs1 ~]# crontab -l
* * * * * /bin/sh  /server/scripts/backup.sh > /dev/null  2>&1
[root@nfs1 ~]# systemctl enable --now crond

(3)backup服务器配置定时任务(清理数据 + 发送邮件)

为了方便测试,我将每天八点发送邮件改为每分钟

[root@backup .certs]# crontab -e
# 每天0点执行清理脚本  
0 0 * * * /bin/sh /server/scripts/del_bak_data.sh >/dev/null 2>&1
# 每分钟执行验证与邮件脚本
* * * * * /bin/sh /server/scripts/send_mail.sh >/dev/null 2>&1

(4)进入QQ邮箱查看

在这里插入图片描述
在这里插入图片描述

五、总结

在独自完成项目时,遇到了不少具体问题。比如 rsync 认证失败,排查后发现是密码文件权限未设为 600,调整权限至 600 后,客户端与备份服务器的同步才恢复正常;编写 web 备份脚本时,不仅变量名输入有误,还误将-type f写成-type -f,导致 find 命令无法正确匹配文件,修正语法后才顺利生成校验值。
另外,打包文件时出现tar: server/scripts:无法 stat的错误,经查是混淆了目录路径,实际脚本目录为/server/scripts却漏写了根路径,补全后解决;防火墙配置也多次出问题,像 mountd 服务未开放端口导致 NFS 挂载失败,通过firewall-cmd添加相关端口规则后,才确保服务间通信正常。最终通过逐一排查和修正,实现了全流程自动化备份与监控。

http://www.dtcms.com/a/318993.html

相关文章:

  • CentOS 7 下通过 Anaconda3 运行llm大模型、deepseek大模型的完整指南
  • Express框架
  • 【JavaEE】(9) JVM
  • ElementUI之表格
  • 企业家 IP 发展态势剖析|创客匠人
  • 计算机网络1-5:计算机网络的性能指标
  • 【python 数据加密AES-GCM + 时间戳签名方案(带时间校验)】
  • vue3 el-select 加载触发
  • tcpdump问题记录
  • 软件运行时 ffmpeg.dll 丢失怎么办?从原因排查到完美修复的完整方案
  • 【Kafka系列】第二篇| Kafka 的核心概念、架构设计、底层原理
  • 什么是 TcpCommunicationSpi
  • HTML已死,HTML万岁——重新思考DOM的底层设计理念
  • 【音视频】WebRTC C++ native 编译
  • SpringAI动态调整大模型平台
  • 数据结构----栈和队列认识
  • Spring IoC 容器核心流程(面试必懂)
  • SpringMvc的原理深度剖析及源码解读
  • crew AI笔记[1] - 简介
  • list类
  • Spring中用到了哪些设计模式
  • 容器之王--Docker镜像的管理及镜像仓库的构建演练
  • W25Q64模块
  • 智慧园区系统:打造未来城市生活新体验
  • 从周末去哪儿玩到决策树:机器学习算法的生活启示
  • 机试备考笔记 7/31
  • 【数据结构】排序(sort) -- 交换排序(冒泡快排)
  • 接入免费的数字人API接口详细教程!!!——小甲鱼数字人
  • OpenCV的关于图片的一些运用
  • 一个基于 select 实现的多路复用 TCP 服务器程序: