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

Linux(openEuler22.03) 定时备份任务 解决方案

目录

  • 定时备份与清理服务
    • 环境
    • 需求概述
    • 步骤详解
      • 1. 配置 rsyncd 服务
        • 在 `backup 服务器`上配置 rsyncd
      • 2. 在 nfs01 和 web01 上配置备份脚本
        • 脚本:backup_configs.sh
        • 配置定时任务
      • 3. 在 backup 服务器上配置同步和清理脚本
        • 脚本:cleanup_backups.sh
        • 配置定时任务
      • 4. 在backup服务器查看备份文件信息并发送备份状态邮件

定时备份与清理服务

环境

  • 操作系统:openEuler 22.03
  • 备份服务器:backup
  • 需要备份的服务器:nfs01, web01
  • 备份目录:/backup/

需求概述

  1. 定时备份 nfs01web01 的配置文件(/etc)到 backup 服务器,备份文件格式为 /backup/<ip地址>/conf-<时间>.tar.gz
  2. 定时同步 nfs01web01 的备份到 backup 服务器的 /backup/ 目录。
  3. 定时删除 nfs01web01 7天之前的备份。
  4. backup 服务器上发送备份状态邮件。

步骤详解

1. 配置 rsyncd 服务

backup 服务器上配置 rsyncd
  1. 创建或编辑 /etc/rsyncd.conf 配置文件,内容如下:
# 全局配置
fake super = yes
uid = rsync
gid = rsync
use chroot = no
max connections = 4
ignore errors
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock# 模块配置
[backup]path = /backupcomment = Backup Directoryread only = nolist = yesauth users = backupusersecrets file = /etc/rsyncd.secrets
  1. 创建用户认证文件 /etc/rsyncd.secrets,内容如下:
cat /etc/rsyncd.secretsbackupuser:password
  1. 设置文件权限:
useradd -s /sbin/nologin -M rsync
mkdir -p /backup
chown -R rsync.rsync /backupchmod 600 /etc/rsyncd.secrets
  1. 启动 rsyncd 服务:
systemctl enable rsyncd --now
systemctl restart rsyncd

2. 在 nfs01 和 web01 上配置备份脚本

脚本:backup_configs.sh
  1. 在每台需要备份的服务器(rsync客户端)上创建脚本 /usr/local/bin/backup_configs.sh,内容如下:
#!/bin/bash
#desc backup /etc to backupserver#变量
# 获取当前时间
TIMESTAMP=`date +%F_%H`# 本地配置文件目录
IP=`hostname -I | awk '{print $1}'`
CONFIG_DIR="/etc"
BACKUP_DIR="/backup/${IP}"
BACKUP_FILE="conf-${TIMESTAMP}.tar.gz"#命令
# 打包配置文件
tar -czf /tmp/${IP}/$BACKUP_FILE $CONFIG_DIR &> /dev/null
#从根目录开始,将$CONFIG_DIR目录中的文件打包并压缩到一个名为$BACKUP_FILE的归档文件中,该文件将被保存在/tmp目录下。#保存md5
md5sum /tmp/${IP}/${BACKUP_FILE} > /tmp/${IP}/fingerprint.md5# 使用rsync传输备份文件到备份服务器
rsync -avz --password-file=/etc/rsync.pass /tmp/${IP} backupuser@backup::backup/$BACKUP_DIR/# 删除临时备份文件
rm /tmp/$BACKUP_FILE# 记录日志
echo "Backup completed for $(hostname) at $TIMESTAMP" >> /var/log/backup_configs.log
  1. 创建 rsync 密码文件 /etc/rsync.pass,内容如下:
cat /etc/rsync.passpasswordchmod 600 /etc/rsync.pass
  1. 设置脚本权限:
chmod +x /usr/local/bin/backup_configs.sh
配置定时任务

使用 crontab 添加定时任务,每天凌晨2点执行备份脚本:

crontab -e

添加以下内容:

0 2 * * * /usr/local/bin/backup_configs.sh

3. 在 backup 服务器上配置同步和清理脚本

脚本:cleanup_backups.sh
  1. 创建脚本 /usr/local/bin/cleanup_backups.sh,内容如下:
#!/bin/bash# 备份目录
BACKUP_DIR="/backup/"# 删除7天之前的备份文件
find $BACKUP_DIR -type f -name "conf-*.tar.gz" -mtime +7 -exec rm -f {} \;# 记录日志
echo "Cleanup completed at $(date +%Y%m%d%H%M%S)" >> /var/log/cleanup_backups.log
  1. 设置脚本权限:
chmod +x /usr/local/bin/cleanup_backups.sh
配置定时任务

使用 crontab 添加定时任务,每天凌晨3点执行清理脚本:

crontab -e

添加以下内容:

0 3 * * * /usr/local/bin/cleanup_backups.sh

4. 在backup服务器查看备份文件信息并发送备份状态邮件

  1. 关于查看信息:
find /tmp -name "conf-*.tar.gz" | xargs ls -lhd | awk -F'[ /]+' 'BEGIN{print "IP FILE Size"}{print $(NF-1),$NF,$5}' | column -t
IP          FILE                               Size
10.0.0.124  conf-2024-05-17_5_22:11:38.tar.gz  12M
10.0.0.124  conf-2024-05-17_5_22:12:40.tar.gz  12M
tmp         conf-2024-05-17_5.tar.gz           12M2. md5验证
```shell
find /backup/ -name "fingerprint.md5" | xargs md5sum -c >> result.txt
3. 关于邮件发送:
```shell
#!bin/bash
#desc show and mail#show
find /tmp -name "conf-*.tar.gz" | xargs ls -lhd | awk -F'[ /]+' 'BEGIN{print "IP FILE Size"}{print $(NF-1),$NF,$5}' | column -t > result.txt#mail
mail -s "Backup Result Today" xxxx@qq.com  < result.txt

具体如何配置邮件发送请见我之前的笔记:
如何在openEuler22.03配置mail.rc给邮箱发邮件

相关文章:

  • LIO-EKF: High Frequency LiDAR-Inertial Odometry using Extended Kalman Filters
  • 【大数据面试题】32 Flink 怎么重复读 Kafka?
  • SpringBoot自动装配原理是什么?
  • 互联网医院开发:引领智慧医疗新时代
  • Mac安装配置maven
  • KDE-Ambari-Metrics-Collector问题排查解决手册
  • 企业防泄密软件有哪些,哪个排名最好
  • 指针数组与数组指针的理解
  • 前端基础:1-2 面向对象 + Promise
  • 4、设计模式之工厂模式
  • C语言常用的内存操作函数
  • 打豆豆game
  • 带你玩转OpenHarmony AI:打造智能语音子系统
  • SpringBoot基础详解
  • 指针变量加1为什么地址加了4?
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【面试系列】之二:关于js原型
  • HomeBrew常规使用教程
  • JavaScript中的对象个人分享
  • Mybatis初体验
  • PAT A1120
  • quasar-framework cnodejs社区
  • Redis的resp协议
  • 大型网站性能监测、分析与优化常见问题QA
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端面试题总结
  • 如何解决微信端直接跳WAP端
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 使用docker-compose进行多节点部署
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 《码出高效》学习笔记与书中错误记录
  • # linux从入门到精通(三)
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #数据结构 笔记三
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (九十四)函数和二维数组
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)80c52学习之旅-起始篇
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)程序员技术练级攻略
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .net Application的目录
  • .net core Swagger 过滤部分Api
  • .net 后台导出excel ,word
  • .Net 路由处理厉害了
  • .Net(C#)常用转换byte转uint32、byte转float等