企業實戰項目:rsync全網備份的過程
第九周-day36-rsync全網備份.png
某公司里有一臺Web服務器,里面的數據很重要,但是如果硬盤壞了,數據就會丟失,現在領導要求你把數據在其他機器上做一個周期性定時備份。要求如下:
1.每天晚上12點整在Web服務器A(web01 )上打包備份網站程序目錄并通過rsync命令推送到服務器B(backup)上備份保留
(備份思路可以是先在本地按日期打包,然后再利用rsync推到備份服務器上)。
rsync守護進程模式
定時任務 (腳本)
具體要求如下:
1)Web服務器A和備份服務器B的備份目錄必須都為/backup。
#擴展要求/backup/ip地址命名目錄中
2)Web服務器站點目錄假定為(/var/www/html)。
3)Web服務器本地僅保留7天內的備份。
4)備份服務器上每周六的數據都保留,其他備份僅保留180天備份。
5)備份服務器上檢查備份結果是否正常(備份內容變?),并將每天的備份結果發給管理員信箱。
發郵件:
1.注冊一個163的郵箱
2.保證 postfix 郵件服務運行
首先準備倆臺機器
web01 10.0.0.7
backup 10.0.0.41
配置rsync守護進程模式并測試
讓服務端和客戶端可以實現推拉
然后我們來完成全網備份的任務:
一、首先是下面四步:
客戶端web01
1.取ip地址,并在/backup/下以ip地址為目錄
2.打包備份/etc/ /var/www/html 到/backup/172.16.1.7,壓縮包命名為conf-2019-05-20-1.tar.gz
3.把備份推送到backup服務器的backup模塊中
4.制作md5校驗
5.刪除7天之前的備份
1.取ip地址,并在/backup/下以ip地址為目錄
[15:48 root@web01 ~]# hostname -I
10.0.0.7 172.16.1.7
[15:48 root@web01 ~]# hostname -I|awk '{print $NF}'
172.16.1.7
[15:49 root@web01 ~]# IP=$(hostname -I|awk '{print $NF}')
[15:49 root@web01 ~]# echo $IP
172.16.1.7
[15:49 root@web01 ~]# mkdir -p /backup/$IP
[15:50 root@web01 ~]# ll /backup/
total 0
drwxr-xr-x 2 root root 38 May 21 15:48 172.16.1.7
2.打包備份/etc/ /var/www/html 到/backup/172.16.1.7
壓縮包命名為conf-2019-05-20-1.tar.gz
創建一個/var/www/html目錄
[6:01 root@web01 ~]# mkdir -p /var/www/html
[16:01 root@web01 ~]# echo $IP
172.16.1.7
[16:01 root@web01 ~]# mkdir -p /backup/$IP
[16:01 root@web01 ~]# tar zcf /backup/$IP/conf-$(date +%F-%w).tar.gz /etc/ /var/www/html
tar: Removing leading `/' from member names
[16:01 root@web01 ~]# tree /backup/
/backup/
└── 172.16.1.7
└── conf-2019-05-21-2.tar.gz
3.把備份推送到backup服務器的backup模塊中
[16:34 root@web01 ~]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
172.16.1.7/
172.16.1.7/conf-2019-05-21-2.tar.gz
sent 10,016,822 bytes received 54 bytes 6,677,917.33 bytes/sec
total size is 10,214,680 speedup is 1.02
服務端看一下:
[16:35 root@backup ~]# tree /backup/
/backup/
└── 172.16.1.7
└── conf-2019-05-21-2.tar.gz
1 directory, 1 file
4. 制作md5校驗信息
[19:51 root@web01 ~]# find /backup/ -type f -name "*.tar.gz"|xargs md5sum
37f059ed20b843ed23b212b42a8a63f2 /backup/172.16.1.7/conf-2019-05-21-2.tar.gz
[19:52 root@web01 ~]# find /backup/ -type f -name "*.tar.gz"|xargs md5sum >/backup/*/*.md5
[19:52 root@web01 ~]# cat /backup/*/*.md5
37f059ed20b843ed23b212b42a8a63f2 /backup/172.16.1.7/conf-2019-05-21-2.tar.gz
5.刪除7天之前的備份
find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -rf
以上4步完成后把/backup下的測試文件刪除掉
6.然后我們就可以寫入腳本文件了
[16:45 root@web01 ~]# vim /server/scripts/rsync_backup.sh
#!/usr/bin/bash
. /etc/profile
#定義變量
IP=$(hostname -I|awk '{print $NF}')
HOSTNAME=$(hostname)
#創建目錄
mkdir -p /backup/$IP
#打包壓縮
tar zcf /backup/$IP/conf-$(date +%F-%w).tar.gz /etc/ /var/www/html
#md5校驗
find /backup/ -type f -name "*.tar.gz"|xargs md5sum >/backup/$IP/$HOSTNAME.md5
#推送
rsync -az /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
#刪除7天之前的
find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -rf
md5sum校驗信息在下文中
7.執行一下腳本并查看目錄是否創建成功
[17:48 root@web01 ~]# tree /backup/
/backup/
└── 172.16.1.7
├── conf-2019-05-21-2.tar.gz
└── web01.md5
1 directory, 2 files
1 directory, 1 file
8.寫入定時任務測試是否成功然后修改規定時間
每天晚上12點備份
[17:02 root@web01 ~]# crontab -e
#rsync_backup
00 00 * * * sh /server/scripts/rsync_backup.sh >/dev/null 2>&1
二、接著我們去backup服務器上配置
我們為了方便測試,可以先創建6個從周一到周6的備份文件
忽略180天,環境中沒有
[17:12 root@backup ~]# touch /backup/172.16.1.7/conf-2019-05-21-{0..6}.tar.gz
[17:13 root@backup ~]# find /backup/ -type f -name "*.tar.gz"
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz
/backup/172.16.1.7/conf-2019-05-21-0.tar.gz
/backup/172.16.1.7/conf-2019-05-21-1.tar.gz
/backup/172.16.1.7/conf-2019-05-21-3.tar.gz
/backup/172.16.1.7/conf-2019-05-21-4.tar.gz
/backup/172.16.1.7/conf-2019-05-21-5.tar.gz
/backup/172.16.1.7/conf-2019-05-21-6.tar.gz
1.備份服務器上的每周六的數據都保留,其他備份僅保留180天備份
先測試一下如何保留周六的數據
[17:14 root@backup ~]# find /backup/ -type f -name "*.tar.gz" ! -name "*-6.tar.gz"
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz
/backup/172.16.1.7/conf-2019-05-21-0.tar.gz
/backup/172.16.1.7/conf-2019-05-21-1.tar.gz
/backup/172.16.1.7/conf-2019-05-21-3.tar.gz
/backup/172.16.1.7/conf-2019-05-21-4.tar.gz
/backup/172.16.1.7/conf-2019-05-21-5.tar.gz
然后刪除掉
[17:20 root@backup ~]# find /backup/ -type f -name "*.tar.gz" ! -name "*-6.tar.gz"|xargs rm -rf
[17:21 root@backup ~]# ll /backup/172.16.1.7/
total 0
-rw-r--r-- 1 root root 0 May 21 17:13 conf-2019-05-21-6.tar.gz
2.檢查備份結果是否正常(備份內容是否改變?)
md5sum檢驗信息
[17:21 root@backup ~]# tree /backup/
/backup/
└── 172.16.1.7
└── conf-2019-05-21-6.tar.gz
1 directory, 1 file
[17:22 root@backup ~]# find /backup/ -type f -name "*.tar.gz" |xargs md5sum
d41d8cd98f00b204e9800998ecf8427e /backup/172.16.1.7/conf-2019-05-21-6.tar.gz
[17:22 root@backup ~]# find /backup/ -type f -name "*.tar.gz" |xargs md5sum >/backup/172.16.1.7/web01.md5
[17:23 root@backup ~]# md5sum -c /backup/172.16.1.7/web01.md5
/backup/172.16.1.7/conf-2019-05-21-6.tar.gz: OK
校驗md5信息的幾種方法
[17:42 root@backup ~]# cp -a /backup/172.16.1.7/ /backup/172.16.1.8
[17:42 root@backup ~]# cp -a /backup/172.16.1.7/ /backup/172.16.1.9
[17:42 root@backup ~]# cp -a /backup/172.16.1.7/ /backup/172.16.1.10
[17:42 root@backup ~]# find /backup/ -type f -name "*.md5"|xargs md5sum -c
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
[17:42 root@backup ~]# md5sum -c /backup/\*/\*.md5 \\撬棍無意義
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
3.將校驗信息寫入文件中
先創建一個文件/backup/md5.txt
[18:48 root@backup ~]# find /backup/ -type f -name "*.md5"|xargs md5sum -c
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
[18:51 root@backup ~]# find /backup/ -type f -name "*.md5"|xargs md5sum -c >/backup/md5.txt
[18:52 root@backup ~]# cat /backup/md5.txt
/backup/172.16.1.7/conf-2019-05-21-2.tar.gz: OK
4.發送郵件
1.注冊一個163的郵箱
記得添加配置郵箱的授權碼,不然郵箱會被屏蔽掉了
2.保證 postfix 郵件服務運行
[17:47 root@backup ~]# systemctl restart postfix.service
[17:50 root@backup ~]# systemctl is-active postfix.service
active
[17:50 root@backup ~]# systemctl is-enabled postfix.service
enabled
3.配置郵箱配置文件
默認沒有安裝
yum install -y mailx
配置/etc/mail.rc最后一行加入:
[17:56 root@backup ~]# vim /etc/mail.rc
....
set from=lichenxing0430@163.com
set smtp=smtp.163.com
set smtp-auth-user=lichenxing0430
set smtp-auth-password=\\郵箱密碼,這里不方便寫入
set smtp‐auth=login
執行一下發送郵件的命令
mail -s:指定郵件的主題
mail -s " Rsync Backup 完成" lichenxing0430@163.com </backup/md5.txt
稍等幾秒鐘...5.以上完成后我們就可以將命令寫到腳本里了
[19:02 root@backup ~]# vim /server/scripts/backup.sh
#!/bin/bash
. /etc/profile
#校驗md5信息
find /backup/ -type f -name "*.md5"|xargs md5sum -c >/backup/md5.txt
#刪除180天前的
find /backup/ -type f -name "*.tar.gz" ! -name "*-6.tar.gz" -mtime +180|xargs rm -rf
#發送郵件
mail -s " Rsync Backup 完成" 245684979@qq.com </backup/md5.txt
6.書寫定時任務
[19:06 root@backup ~]# crontab -e
#backup.sh
00 06 * * * sh /server/scripts/check_backup.sh >/dev/null 2>&1
今天的知識點看似很多其實不多,要理解客戶端和服務端的每一條腳本命令的作用。
未完待續......