防火墻環境下的全網服務器數據自動化備份平臺搭建:基于 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.pswp.cn/diannao/95069.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95069.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95069.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring之【Import】

目錄 Import注解 源碼分析 使用示例 ImportSelector 源碼分析 使用示例 DeferredImportSelector 源碼分析 使用示例 ImportBeanDefinitionRegistrar 源碼分析 使用示例 Import注解 源碼分析 處理組件類上的Import注解 將Import引入類對應的BeanDefinition對象添加…

RN項目環境搭建和使用-Mac版本(模擬器啟動不起來的排查)

ReactNative&#xff1a; https://github.com/facebook/react-native https://reactnative.cn/docs/getting-started &#xff08;可以先通讀一下這個&#xff09; 環境搭建 &#xff08;mac版&#xff09;https://juejin.cn/post/7404860612758765605 搭建之前確認版本&#x…

懸賞任務系統網站兼職賺錢小程序搭建地推抖音視頻任務拉新源碼功能詳解二開

功能詳解&#xff08;一&#xff09;登錄與注冊1、登錄&#xff1a;打開系統用戶端&#xff0c;輸入已注冊的手機號&#xff0c;若為首次登錄或忘記密碼&#xff0c;可通過 “找回密碼” 功能&#xff0c;按提示驗證身份后重置密碼登錄。 2、注冊&#xff1a;點擊 “注冊” 按鈕…

scikit-learn/sklearn學習|線性回歸解讀

【1】引言 前序學習進程中&#xff0c;對SVM相關的數學原理進行了探索和推導&#xff0c;相關文章鏈接包括且不限于&#xff1a; python學智能算法&#xff08;二十六&#xff09;|SVM-拉格朗日函數構造-CSDN博客 python學智能算法&#xff08;二十八&#xff09;|SVM-拉格朗…

音視頻學習(五十一):AAC編碼器

什么是AAC編碼器&#xff1f; 高級音頻編碼&#xff08;Advanced Audio Coding&#xff0c;簡稱AAC&#xff09; 是一種有損音頻壓縮技術&#xff0c;旨在作為MP3的下一代標準而開發。它的主要目標是在比MP3更低的比特率下提供更好的音質&#xff0c;同時具備更強的靈活性和功能…

10-netty基礎-手寫rpc-定義協議頭-02

netty系列文章&#xff1a; 01-netty基礎-socket02-netty基礎-java四種IO模型03-netty基礎-多路復用select、poll、epoll04-netty基礎-Reactor三種模型05-netty基礎-ByteBuf數據結構06-netty基礎-編碼解碼07-netty基礎-自定義編解碼器08-netty基礎-自定義序列化和反序列化09-n…

計算機畢設缺乏創新點?基于大數據的快手平臺用戶活躍度分析系統給你思路【程序開發+項目定制】

精彩專欄推薦訂閱&#xff1a;在 下方專欄&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主頁&#xff1a;計算機畢設木哥&#x1f525; &#x1f496; 文章目錄 一、項目介紹二…

01.【面試題】在SpringBoot中如何實現多數據源配置

文章目錄 1. 什么是多數據源 1.1 基本概念 1.2 傳統單數據源 vs 多數據源 單數據源架構 多數據源架構 2. 為什么需要多數據源 2.1 業務場景需求 2.2 技術優勢 3. 多數據源的實現方式 3.1 靜態多數據源 3.2 動態多數據源 4. 環境準備 4.1 創建SpringBoot項目 pom.xml依賴配置 4.…

redis主從模型與對象模型

redis淘汰策略 首先我們要明確這里說的淘汰策略是淘汰散列表中的key-value&#xff0c;而不是value中的各個數據結構 過期key中 volatile-lru 從設置了過期時間的鍵中&#xff0c;移除最近最少使用的鍵&#xff08;LRU算法&#xff09;。適合需要優先保留高頻訪問數據的場景…

快速搭建開源網頁編輯器(vue+TinyMCE)

文章目錄 Tiny MCE 安裝方法 1. 安裝node.js 2. 創建vue3項目 3. 安裝TinyMCE依賴并使用 (1)在component文件夾創建Editor.vue文件 (2)編輯App.vue文件 (3)運行項目 (4)獲取并設置API key (5)設置中文菜單 Tiny MCE 安裝方法 1. 安裝node.js 下載地址:https://nod…

ADK【4】內置前端調用流程

文章目錄說明ADK內置前端ADK內置前端開啟流程說明 本文學自賦范社區公開課&#xff0c;僅供學習和交流使用&#xff0c;不用作任何商業用途&#xff01; ADK內置前端 ADK作為最新一代Agent開發框架&#xff0c;不僅功能特性非常領先&#xff0c;而且還內置了非常多的工具&am…

LLMs之GPT-5:OpenAI 發布更智能、更快速、更有用的 AI 模型—內置思考能力,賦能人人專家級智能—技術突破、性能評估與安全保障全面解讀

LLMs之GPT-5&#xff1a;OpenAI 發布更智能、更快速、更有用的 AI 模型—內置思考能力&#xff0c;賦能人人專家級智能—技術突破、性能評估與安全保障全面解讀 導讀&#xff1a;2025年8月7日&#xff0c;OpenAI 發布了 GPT-5&#xff0c;這是他們目前最智能的 AI 系統。它在編…

Java 中操作 R 的全面指南

Java 中操作 R 的全面指南 引言 Java作為一種廣泛使用的編程語言,具有跨平臺、高性能、可擴展等特點。隨著大數據和機器學習的興起,Java在處理和分析復雜數據集方面發揮著越來越重要的作用。R語言,作為一種專門用于統計計算和圖形展示的語言,同樣在數據分析領域有著舉足輕…

數據結構——優先級隊列(PriorityQueue):一文解決 Top K 問題!

目錄 1.優先級隊列 2. 堆的概念 3. 堆的存儲方式 4. 堆的創建 4.1 向下調整 4.2 堆的創建 4.3 堆的插入 4.4 堆的刪除 5.用堆模擬實現優先級隊列 6.常用接口的介紹 6.1 PriorityQueue 的特性 6.2 PriorityQueue 的方法 7. Top K問題 1.優先級隊列 隊列是一種先進先…

C語言自定義類型深度解析:聯合體與枚舉

在C語言中&#xff0c;自定義類型為數據組織提供了極大的靈活性。除了常用的結構體&#xff0c;聯合體&#xff08;共用體&#xff09;和枚舉也是非常重要的自定義類型。本文將結合實例&#xff0c;詳細解析聯合體和枚舉的特性、用法及實際應用場景。 一、聯合體&#xff08;Un…

Numpy科學計算與數據分析:Numpy數據分析基礎之統計函數應用

Numpy統計函數實戰&#xff1a;數據的聚合與分析 學習目標 通過本課程的學習&#xff0c;學員將掌握Numpy中用于統計分析的關鍵函數&#xff0c;如求和(sum)、平均值(mean)、標準差(std)等&#xff0c;能夠熟練地在實際數據集中應用這些函數進行數據的聚合與分析。 相關知識…

從引導加載程序到sysfs:Linux設備樹的完整解析與驅動綁定機制

摘要本報告旨在為嵌入式Linux開發者詳細梳理設備樹&#xff08;Device Tree, DT&#xff09;在系統啟動中的完整解析流程。報告將從引導加載程序&#xff08;Bootloader&#xff09;如何準備和傳遞設備樹二進制文件&#xff08;DTB&#xff09;開始&#xff0c;逐步深入到內核如…

基于深度學習的污水新冠RNA測序數據分析系統

基于深度學習的污水新冠RNA測序數據分析系統 摘要 本文介紹了一個完整的基于深度學習技術的污水新冠RNA測序數據分析系統&#xff0c;該系統能夠從未經處理的污水樣本中識別新冠病毒變種、監測病毒動態變化并構建傳播網絡。我們詳細闡述了數據處理流程、深度學習模型架構、訓練…

寶塔面板配置Nacos集群

一、環境準備 準備三臺及以上的服務器&#xff0c;我這里準備了3臺服務器&#xff0c;172.31.5.123&#xff5e;125&#xff1b;分別安裝好寶塔面板&#xff0c;軟件商店里安裝nacos&#xff1b;二、Nacos集群配置 配置數據庫連接&#xff1a;? 進入每臺服務器上 Nacos 解壓后…

Spring Boot 3.x 全新特性解析

Spring Boot 是企業級 Java 開發中最常用的框架之一。自 Spring Boot 3.x 發布以來&#xff0c;其引入的一系列重大變更與優化&#xff0c;為開發者提供了更現代、更高效的開發體驗。本文將重點解析 Spring Boot 3.x 的關鍵特性及其對項目架構的影響。 一、基于 Jakarta EE 10 …