使用工具 | VMware 17.0 Xshell 7.0 CentOS 7.0 |
---|---|
参考资料 | 无 |
-
服务器间数据的自动备份服务的项目背景
● 需求可能来自于老大的一句话, “欧阳,网站数据需要备份
,你去做一下。”
● 那么接下来的内容就需要我们自己规划,备份什么内容? 如何备份? 如何收集备份(统一存放备份)? 保留多长时间? 都是什么系统? 什么系统的版本?
○ 备份什么? → 数据、配置文件、脚本、代码、日志
○ 如何备份? → 打包压缩+定时任务
○ 如何收集? → rsync 服务收集备份 -
服务器间数据的自动备份服务的项目步骤
(1) rsync 服务端并调试 : 服务端配置 /backup/ 目录
(2) rsync 客户端节点配置脚本 (备份) : 备份、推送、清理
(3) 其他节点匹配值定时任务 : 定时运行脚本
(4) 在备份服务器上检查并发送结果邮件
-
确认是否完成服务器间数据的手动备份服务?
- 是否完成服务器间数据的手动备份服务? → 参考教程 : 服务器间数据的手动备份服务
-
确认是否通过模板虚拟机克隆出 web 服务器 (IP地址为10.0.0.7, 主机名为xuxouy007) ?
- 是否通过模板虚拟机克隆出 web 服务器? → 参考教程 : 模板虚拟机克隆
-
在服务端 (10.0.0.41) rsyncd.conf 文件末尾追加自动备份的备份路径
vim /etc/rsyncd.conf -------------------------------------------------- # 末尾追加如下内容 [backup] # 备注内容: 收集备份 comment = gather backups # 备份的存放路径 path = /backup/ -------------------------------------------------- :wq
-
在服务端 (10.0.0.41) 准备自动备份的目录并修改相应的权限
# 创建备份文件夹并修改权限后查看 mkdir -p /backup/ chown -R rsync.rsync /backup/ ll -d /backup/ # 重启 rsyncd 服务并查看 systemctl restart rsyncd systemctl status rsyncd
-
在客户端 (10.0.0.31) 测试数据能否通过 rsync 服务传输备份到服务器
rsync -av /etc/hostname rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.client
-
在客户端 (10.0.0.31) 书写备份脚本
vim /server/scripts/bak_conf.sh -------------------------------------------------- #!/bin/bash # author: xuxouy # desc: 备份服务器的配置文件 # 1.变量 ip=`hostname -I |awk '{print $2}'` backup_dir=/backup/${ip} time=`date +%F_%w` backup_file=conf-${time}.tar.gz backup_server=172.16.1.41 # 备份服务器地址 # 2.备份命令 mkdir -p ${backup_dir} tar zcfP ${backup_dir}/${backup_file} /etc/ /var/spool/cron/ # 3.推送命令 rsync -a ${backup_dir} rsync_backup@${backup_server}::backup --password-file=/etc/rsync.client # 4.删除旧的备份 find ${backup_dir} -type f -name "*.tar.gz" -mtime +7 | xargs rm -f -------------------------------------------------- :wq
# 执行 bak_conf.sh 脚本查看是否生效 sh /server/scripts/bak_conf.sh
-
在客户端 (10.0.0.31) 将备份脚本写入定时任务
# 编写定时任务 crontab -e -------------------------------------------------- # [xuxouy031] in [2023-11-15] --> [每天24点整备份一次] 00 00 * * * sh /server/scripts/bak_conf.sh &>/dev/null -------------------------------------------------- :wq # 查看已有的定时任务 crontab -l
-
在客户端 (10.0.0.31) 将编写好的脚本和配置文件通过 scp 命令传输到客户端 (10.0.0.7)
# 全量传输脚本文件 scp /server/scripts/bak_conf.sh 10.0.0.7:/server/scripts/ # 全量传输免密登陆配置文件 scp /etc/rsync.client 10.0.0.7:/etc/ # 全量传输定时任务文件 scp /var/spool/cron/root 10.0.0.7:/var/spool/cron/ # 查看脚本、免密登陆文件、定时任务文件是否传输成功 head -30 /server/scripts/bak_conf.sh /etc/rsync.client /var/spool/cron/root
# 执行一次 bak_conf.sh 脚本 sh /server/scripts/bak_conf.sh
-
在服务端 (10.0.0.41) 编写检查备份并发送邮件的脚本
# 编写脚本 vim /server/scripts/check.sh -------------------------------------------------- #!/bin/bash # author: xuxouy # desc: 检查备份, 清理旧的备份 # 0.清理旧的备份 find /backup -type f -name ".tar.gz" -mtime +180 | xargs rm -f # 1.统计备份结果 find /backup/ -type f -name "*.tar.gz" | xargs \ ls -lhd | \ awk -F '[ /]+' 'BEGIN{print "IP地址","备份文件名","文件大小"} {print $(NF-1),$NF,$5}' | \ column -t > /server/scripts/result.txt # 2.发送邮件 mail -s "每日备份结果" 3249512370@qq.com < /server/scripts/result.txt -------------------------------------------------- :wq
-
将服务端 (10.0.0.41) 检查备份并发送邮件的脚本加入到定时任务当中
# 编写定时任务 crontab -e -------------------------------------------------- # [xuxouy041] in [2023-11-10] --> [每天24点整定时运行检查脚本] 00 00 * * * sh /server/scripts/check.sh &>> /tmp/check.log -------------------------------------------------- :wq # 查看当前已有的定时任务 crontab -l # 执行一次 check.sh 脚本 sh /server/scripts/check.sh
-
将客户端 (10.0.0.7) 备份脚本增加校验功能
# 将 bak_conf.sh 脚本修改为以下内容 vim /server/scripts/bak_conf.sh -------------------------------------------------- #!/bin/bash # author: xuxouy # desc: 备份服务器的配置文件 # 1.变量 ip=`hostname -I |awk '{print $2}'` backup_dir=/backup/${ip} time=`date +%F_%w` backup_file=conf-${time}.tar.gz backup_server=172.16.1.41 # 2.备份命令 mkdir -p ${backup_dir} tar zcfP ${backup_dir}/${backup_file} /etc/ /var/spool/cron/ # 2.5 md5 校验 md5sum ${backup_dir}/${backup_file} >${backup_dir}/fingerprint.md5 # 3.推送命令 rsync -a ${backup_dir} rsync_backup@${backup_server}::backup --password-file=/etc/rsync.client # 4.删除旧的备份 find ${backup_dir} -type f -name "*.tar.gz" -mtime +7 | xargs rm -f -------------------------------------------------- :wq
# 执行一次脚本 sh /server/scripts/bak_conf.sh
-
将客户端 (10.0.0.31) 备份脚本增加校验功能
# 将 bak_conf.sh 脚本修改为以下内容 vim /server/scripts/bak_conf.sh -------------------------------------------------- #!/bin/bash # author: xuxouy # desc: 备份服务器的配置文件 # 1.变量 ip=`hostname -I |awk '{print $2}'` backup_dir=/backup/${ip} time=`date +%F_%w` backup_file=conf-${time}.tar.gz backup_server=172.16.1.41 # 2.备份命令 mkdir -p ${backup_dir} tar zcfP ${backup_dir}/${backup_file} /etc/ /var/spool/cron/ # 2.5 md5 校验 md5sum ${backup_dir}/${backup_file} >${backup_dir}/fingerprint.md5 # 3.推送命令 rsync -a ${backup_dir} rsync_backup@${backup_server}::backup --password-file=/etc/rsync.client # 4.删除旧的备份 find ${backup_dir} -type f -name "*.tar.gz" -mtime +7 | xargs rm -f -------------------------------------------------- :wq
# 执行一次脚本 sh /server/scripts/bak_conf.sh
-
将客户端 (10.0.0.41) 检查脚本增加校验功能
vim /server/scripts/check.sh -------------------------------------------------- #!/bin/bash # author: xuxouy # desc: 检查备份, 清理旧的备份 result_file=/server/scripts/result.txt # 0.清理旧的备份 find /backup -type f -name ".tar.gz" -mtime +180 | xargs rm -f # 1.统计备份结果 find /backup/ -type f -name "*.tar.gz" | xargs \ ls -lhd | \ awk -F '[ /]+' 'BEGIN{print "IP地址","备份文件名","文件大小"} {print $(NF-1),$NF,$5}' | \ column -t > ${result_file} # 1.5 MD5校验检查 echo "# 下列信息为备份的MD5校验信息" >> ${result_file} find /backup/ -name "fingerprint.md5" | xargs md5sum -c >> ${result_file} # 2.发送邮件 mail -s "每日备份结果" 3249512370@qq.com < ${result_file} -------------------------------------------------- :wq
# 执行一次脚本 sh /server/scripts/check.sh