数据库运维
记录DBA学习成长历程

第16章:综合架构全网备份

文章目录

1 完成企业需求思路

a 领导提出需求
b 对需求进行分析,将分析结果发送给负责人
c 按照分析的结构进行分步骤完成(时间规划表)

2 架构需求

已知3台服务器主机名分别为web01、backup、nfs01
要求:每天晚上00点整在Web服务器上打包备份系统配置文件、网站程序目录及访问日志并通过rsync命令推送备份服务器backup上备份保留
(备份思路可以是先在本地按日期打包,然后再推到备份服务器backup上),NFS存储服务器同Web服务器,实际工作中就是全部的服务器。

3 完成部署规划

完成服务端 rsync 服务搭建 
完成客户端 rsync 命令推送到服务端 
完成客户端本地打包及校验脚本。 完成客户端定时任务配置。 
完成服务端数据完整性检查及清理脚本 完成服务端定时执行脚本 
实现每日邮件发送结果给管理员

1) 所有服务器的备份目录必须都为/backup
2) 要备份的系统配置文件: 
   定时任务服务的配置文件 (/var/spool/cron/root) (适合web和nfs服务器)。
   开机自启动的配置文件 (/etc/rc.local) (适合web和nfs服务器)。
   日常脚本的目录 (/server/scripts)
   防火墙iptables的配置文件 (/etc/sysconfig/iptables)。
   还有什么需要备份呢?
3) Web服务器站点目录假定为(/var/html/www)
4) Web服务器访问日志路径假定为(/app/logs)
5) Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)
6) 备份服务器上,同时保留6个月内每周一的所有数据副本
   两个思路:
   第一个思路: 到周一的时候,将周一备份的数据从backup目录移走
     周一执行命令: 
     find /backup -type f -name "*$(date +%F).tar.gz"|xargs mv -t /tmp
   第二个思路: 让服务端可以再备份数据中识别到周一的备份数据
     find /backup/ -type f -mtime +180 ! -name "*_week01.tar.gz"|xargs rm -f
7) 备份服务器上,要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。 
8) 需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中。

4 全网备份部署流程

4.1 备份客户端nfs机器部署流程

第一个历程: 创建备份目录
mkdir /backup -p

第二个历程: 进行打包备份的系统配置文件数据
[root@nfs01 ~]# crontab -e
[root@nfs01 ~]# touch /etc/sysconfig/iptables
[root@nfs01 ~]# cd /
[root@nfs01 ~]#tar zcvfh /backup/system_data_bak.tar.gz ./var/spool/cron/root ./etc/rc.local 
./server/scripts ./etc/sysconfig/iptables
[root@nfs01 /]# cd /backup
[root@nfs01 backup]# ll
total 4
-rw-r--r-- 1 root root 549 May 12 05:09 system_data_bak.tar.gz
[root@nfs01 backup]# tar xf /backup/system_data_bak.tar.gz
[root@nfs01 backup]# ll
total 4
drwxr-xr-x 3 root root 39 May 12 05:09 etc
drwxr-xr-x 3 root root 21 May 12 05:09 server
-rw-r--r-- 1 root root 549 May 12 05:09 system_data_bak.tar.gz
drwxr-xr-x 3 root root 19 May 12 05:09 var
[root@nfs01 backup]# ll etc
total 4
-rw-r--r-- 1 root root 473 Oct 31 2018 rc.local
drwxr-xr-x 2 root root 22 May 12 05:09 sysconfig

第三个历程: 保留7天数据
find /backup -type f -mtime +7|xargs rm -f

第四个历程: 生成数据完整性验证指纹文件
md5sum system_data_bak.tar.gz >/backup/finger.txt

第五个历程: 利用rsync命令推送数据
rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

4.2 编写nfs_bak.sh脚本文件

#!/bin/bash
mkdir /backup -p
cd /
tar zcfh /backup/system_data_bak.tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts 
./etc/sysconfig/iptables
find /backup -type f -mtime +7|xargs rm -f
md5sum /backup/system_data_bak.tar.gz >/backup/finger.txt
rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

4.3 优化nfs_bak.sh脚本文件

[root@nfs01 scripts]# cat nfs_bak.sh
#!/bin/bash
Date_info=$(date +%F_week0%w)
IP_info=$(hostname -i)
backup_dir="/backup/$IP_info"

# create backup dir
mkdir $backup_dir/ -p

# tar data
cd /
tar zcfh $backup_dir/system_data_bak_$Date_info.tar.gz ./var/spool/cron/root ./etc/rc.local 
./server/scripts ./etc/sysconfig/iptables

# del 7 ago data
find $backup_dir -type f -mtime +7|xargs rm -f

# check data info
md5sum $backup_dir/system_data_bak_$Date_info.tar.gz >$backup_dir/finger.txt

# pull data to backup_server
rsync -az $backup_dir rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

4.4 web01机器

第一个历程: 创建工作及备份目录
[root@nfs01 ~]# mkdir /var/html/www -p
[root@nfs01 ~]# mkdir /app/logs -p
[root@nfs01 ~]# crontab -e 
[root@nfs01 ~]# touch /etc/sysconfig/iptables
[root@nfs01 ~]# mkdir /backup -p

第二个历程: 部署备份服务
[root@web01 ~]# echo oldboy123>/etc/rsync.password
[root@web01 ~]# chmod 600 /etc/rsync.password

第三个历程:脚本信息

4.5 web01机器web01_bak.sh脚本

[root@web01 ~]# cat /server/scripts/web01_bak.sh
#!/bin/bash
Date_info=$(date +%F_week0%w)
IP_info=$(hostname -i)
backup_dir="/backup/$IP_info"

# create backup dir
mkdir $backup_dir/ -p

# tar data
cd /
tar zchf $backup_dir/system_data_bak_$Date_info.tar.gz ./var/spool/cron/root ./etc/rc.local 
./server/scripts ./etc/sysconfig/iptables
tar zchf $backup_dir/web_data_bak_$Date_info.tar.gz ./var/html/www
tar zchf $backup_dir/web_log_bak_$Date_info.tar.gz ./app/logs

# del 7 ago data
find $backup_dir -type f -mtime +7|xargs rm -f

# check data info
md5sum $backup_dir/*$Date_info.tar.gz >$backup_dir/finger.txt

# pull data to backup_server
rsync -az $backup_dir rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

4.6 backup备份服务端部署流程

第一个历程: 创建备份目录
mkdir /backup -p

第二个历程: 配置rsync守护进程服务
服务端已经部署完毕测试是否成功
[root@nfs01 backup]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=
/etc/rsync.password
[root@backup ~]# ll /backup
total 4
-rw-r--r-- 1 rsync rsync 174 Apr 6 01:27 hosts

第三个历程: 保留数据信息
find /backup/ -type f -mtime +180 -name "*.tar.gz" ! -name "*_week01.tar.gz"|xargs rm -f

第四个历程: 对数据进行校验
md5sum -c finger.txt
#01. 打开指纹文件,识别md5数值,和要校验文件信息
#02. 对识别到文件信息进行校验
#03. 将本地校验的结果和原有md5数值做比较
#04. 比较成功提示OK 比较失败提示faild

第五个历程: 如何让系统发送邮件信息
echo "系统有异常问题,请检查系统"|mail -s "异常告警" 发送给谁的邮箱信息
mail -s "异常告警" 330882721@qq.com </tmp/mail.txt

4.7 完成邮件服务部署

linux --- 借助其他外网的邮箱 --- 邮件 --- 运维人员

1) 配置外网QQ邮箱环境
POP3/IMAP/SMTP/Exchange/CardDAV 服务开启
设置授权码yrggdpbiqfxjbffdgy
2) 让linux和外网邮箱建立连接
vim /etc/mail.rc
set from=954759237@qq.com smtp=smtp.qq.com
set smtp-auth-user=954759237@qq.com smtp-auth-password=yrggdpbiqfxjbffdgy smtp-auth=login
3) 重启邮件服务
systemctl restart postfix.service

4.8 backup_server.sh脚本文件

vim /server/scripts/backup_server.sh
初始脚本
#!/bin/bash
# create backup dir
mkdir /backup -p

# del 180 ago data , but save week01
find /backup/ -type f -mtime +180 -name "*.tar.gz" ! -name "*_week01.tar.gz"|xargs rm -f

# check data
md5sum -c /backup/172.16.1.31/finger.txt
find /backup/ -type f -name "finger.txt"|xargs md5sum -c >/tmp/mail.txt

# sent mail
mail -s "异常告警" 330882721@qq.com </tmp/mail.txt

4.9 backup_server.sh脚本优化

优化脚本v1
[root@backup scripts]# cat backup_server.sh
#!/bin/bash
Backup_Dir="/backup"

# create backup dir
mkdir $Backup_Dir -p

# del 180 ago data , but save week01
find $Backup_Dir/ -type f -mtime +180 -name "*.tar.gz" ! -name "*_week01.tar.gz"|xargs rm -f

# check data
find $Backup_Dir/ -type f -name "finger.txt"|xargs md5sum -c >/tmp/mail.txt 2>/dev/null

# sent mail
mail -s "异常告警" 954759237@qq.com </tmp/mail.txt

备份服务器脚本优化v2
[root@backup scripts]# cat /server/scripts/backup_server.sh
#!/bin/bash
Date_info="$(date +%F_week0%w)"
Backup_Dir="/backup"
File_count="$(find /backup -type f -name "*$Date_info.tar.gz"|wc -l)"
Find_finger="$(find /backup -type f -name "finger.txt" -mmin +70|xargs awk '{print $2}')"

# create backup dir
mkdir $Backup_Dir -p

# del 180 ago data , but save week01
find $Backup_Dir/ -type f -mtime +180 -name "*.tar.gz" ! -name "*_week01.tar.gz"|xargs rm -f

# check data rsync
if [ $File_count -ne 4 ]
then
echo -e "文件不符合要求\n$Find_finger"|mail -s "数据传输备份情况" 954759237@qq.com
fi

# check data
find $Backup_Dir/ -type f -name "finger.txt"|xargs md5sum -c >/tmp/mail.txt 2>/dev/null

# sent mail
mail -s "异常告警" 954759237@qq.com </tmp/mail.txt

4.10 模拟异常

[root@backup 172.16.1.31]# ll
total 8
-rw-r--r-- 1 rsync rsync 95 May 12 17:26 finger.txt
-rw-r--r-- 1 rsync rsync 874 May 12 17:26 system_data_bak_2023-05-12_week05.tar.gz
[root@backup 172.16.1.31]# vim finger.txt
[root@backup 172.16.1.31]# cat finger.txt
b05dc0dbb11e5cdd45ecf3ee4ca670d2 /backup/172.16.1.31/system_data_bak_2023-05-11_week04.tar.gz
[root@backup 172.16.1.31]# touch -d "20230511" finger.txt 
[root@backup 172.16.1.31]# mv system_data_bak_2023-05-12_week05.tar.gz  
system_data_bak_2023-05-11_week05.tar.gz
[root@backup 172.16.1.31]# ll
total 8
-rw-r--r-- 1 rsync rsync 95 May 11 00:00 finger.txt
-rw-r--r-- 1 rsync rsync 874 May 12 17:26 system_data_bak_2023-05-11_week04.tar.gz
[root@backup 172.16.1.31]# sh -x /server/scripts/backup_server.sh
+ '[' 3 -ne 4 ']'
+ mail -s 数据传输备份情况 954759237@qq.com
+ echo -e '文件不符合要求\n/backup/172.16.1.31/system_data_bak_2023-05-11_week04.tar.gz'

5 创建定时任务

[root@nfs01 ~]# crontab -e
crontab: installing new crontab
[root@nfs01 ~]# crontab -l
0 0 * * * /bin/sh /server/scripts/nfs_bak.sh &>/dev/null
[root@web01 ~]# crontab -e
crontab: installing new crontab
[root@web01 ~]# crontab -l
0 0 * * * /bin/sh /server/scripts/web01_bak.sh &>/dev/null
[root@backup backup]# crontab -e
crontab: installing new crontab
[root@backup backup]# crontab -l
0 6 * * * /bin/sh /server/scripts/backup_server.sh &>/dev/null
赞(0)
MySQL学习笔记 » 第16章:综合架构全网备份