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

【网络云计算】2024第52周-每日【2024/12/26】小测-理论实操-备份MySQL数据库并发送邮件-解析

文章目录

      • 1. 编写备份脚本
      • 2. 设置定时任务
      • 3. 注意事项

【网络云计算】2024第52周-每日【2024/12/26】小测-理论&实操-备份MySQL数据库并发送邮件-解析

为了实现您提出的Discuz数据库备份任务,包括备份脚本、定时任务、备份成功邮件确认、脚本运行时长、备份后的数据列表和数据大小、使用tar打包并压缩且加密码保护、生成MD5并发送邮件,我们需要进行以下步骤:

1. 编写备份脚本

首先,编写一个Shell脚本来完成备份任务。我们将使用mysqldump来备份数据库,tar来打包和压缩文件,md5sum来计算MD5值,mailsendmail来发送邮件。

#!/bin/bash# 设置变量
DB_USER="your_db_user"
DB_PASS="your_db_password"
DB_NAME="your_db_name"
BACKUP_DIR="/path/to/backup/dir"
EMAIL="your_email@example.com"
TAR_PASS="your_tar_password"
LOG_FILE="$BACKUP_DIR/backup.log"# 获取当前时间
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
BACKUP_FILE="$BACKUP_DIR/discuz_backup_$TIMESTAMP.sql"
TAR_FILE="$BACKUP_DIR/discuz_backup_$TIMESTAMP.tar.gz"
MD5_FILE="$BACKUP_DIR/discuz_backup_$TIMESTAMP.md5"# 开始备份
{echo "Backup started at $(date)"echo "Database: $DB_NAME"echo "User: $DB_USER"# 备份数据库mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_FILEif [ $? -ne 0 ]; thenecho "Database backup failed" >> $LOG_FILEexit 1fi# 获取数据库文件大小和列表DB_SIZE=$(du -sh $BACKUP_FILE | awk '{print $1}')DB_FILES=$(ls -l $BACKUP_FILE)echo "Database backup size: $DB_SIZE" >> $LOG_FILEecho "$DB_FILES" >> $LOG_FILE# 打包并压缩,同时设置密码保护echo "$TAR_PASS" | tar --password-file=- -czf $TAR_FILE $BACKUP_FILEif [ $? -ne 0 ]; thenecho "Tar compression failed" >> $LOG_FILEexit 1fi# 计算MD5值md5sum $TAR_FILE > $MD5_FILEMD5_VALUE=$(cat $MD5_FILE | awk '{print $1}')# 结束时间END_TIME=$(date)echo "Backup ended at $END_TIME" >> $LOG_FILE# 计算运行时长RUN_TIME=$(date -d @$(( ( $(date +%s) - $(date -d "$(grep "Backup started at" $LOG_FILE | awk '{print $NF}') +%s) )) ) +"%H:%M:%S")echo "Run time: $RUN_TIME" >> $LOG_FILE# 发送邮件通知SUBJECT="Discuz Database Backup - $TIMESTAMP"BODY="Backup completed successfully.\n\n"BODY+="Run time: $RUN_TIME\n"BODY+="Backup size: $DB_SIZE\n\n"BODY+="Database backup file list:\n$DB_FILES\n\n"BODY+="MD5 checksum file attached.\n\n"BODY+="Best regards,\nYour Server"# 发送带有MD5附件的邮件uuencode $MD5_FILE $MD5_FILE | mail -s "$SUBJECT" -a "$MD5_FILE" $EMAILif [ $? -eq 0 ]; thenecho "Email with MD5 checksum sent" >> $LOG_FILEelseecho "Failed to send email with MD5 checksum" >> $LOG_FILEfi# 发送包含所有信息的邮件(可选)mail -s "$SUBJECT" -a "$TAR_FILE" "$EMAIL" <<< "$BODY"if [ $? -eq 0 ]; thenecho "Email with backup file sent (as attachment)" >> $LOG_FILEelseecho "Failed to send email with backup file" >> $LOG_FILEfi} >> $LOG_FILE 2>&1# 删除原始SQL文件(可选)
rm -f $BACKUP_FILE

注意

  • uuencode 命令用于将文件编码为适合邮件发送的ASCII格式。然而,不是所有的邮件客户端或邮件服务器都支持此功能。如果uuencode或邮件附件发送失败,您可能需要寻找其他方法来发送MD5文件或将其内容包含在邮件正文中。
  • 脚本中的密码保护是通过tar--password-file=-选项实现的,它从标准输入读取密码。这种方法在脚本中是不安全的,因为密码以明文形式出现在脚本中。在实际应用中,您应该考虑使用更安全的方法来存储和检索密码,例如环境变量、密钥管理服务或加密的配置文件。
  • 发送邮件时,如果邮件服务器不支持附件或uuencode,您可能需要配置邮件服务器或使用第三方邮件发送服务(如SendGrid、Mailgun等)。

2. 设置定时任务

使用cron来设置定时任务。编辑crontab文件:

crontab -e

添加一行来每天运行备份脚本(例如,每天凌晨2点):

0 2 * * * /path/to/your/backup_script.sh

保存并退出。现在,您的备份脚本将按照设定的时间自动运行。

3. 注意事项

  • 确保备份目录有足够的磁盘空间来存储备份文件。
  • 定期检查备份日志以确保备份成功。
  • 定期测试邮件通知功能以确保在备份失败或成功时能够收到通知。
  • 考虑使用更安全的密码存储和检索方法。
  • 根据您的实际需求调整脚本中的变量和路径。
http://www.lryc.cn/news/510072.html

相关文章:

  • 菜鸟带新鸟——基于EPlan2022的部件库制作(3D)
  • Level DB --- MemTable
  • 【山西长治】《长治市市直部门政务信息化建设项目预算编制规范和预算编制标准》(长财行[2022]25号)-省市费用标准解读系列32
  • 海格通信嵌入式面试题及参考答案
  • 前端学习DAY27(盒子模型内边距)
  • 基于cobra开发的k8s命令行管理工具k8s-manager
  • scala基础学习(数据类型)-数组
  • uniapp 微信小程序 页面部分截图实现
  • C语言从入门到放弃教程
  • 直流无刷电机驱动原理3-驱动板硬件设计
  • 攻防世界web第三题file_include
  • Trivy Operator命令使用说明
  • Lazada商品评论API接口:深度解析与应用实践
  • 2024最新鸿蒙开发面试题合集(二)-HarmonyOS NEXT Release(API 12 Release)
  • macrodroid通过http请求控制手机运行宏
  • 【Unity3D】Jobs、Burst并行计算裁剪Texture3D物体
  • Cesium材质——Material
  • Postman请求报错SSL证书验证问题
  • 终章:DevOps实践总结报告
  • 解锁金融新纪元:内部知识库的深度挖掘与战略价值
  • 【c语言】一维数组与二维数组
  • Milvus×EasyAi:如何用java从零搭建人脸识别应用
  • Dockerfile 实战指南:解锁高效容器化开发
  • 【每日学点鸿蒙知识】混淆配置、主线程处理大量数据、客户端拖拽效果、三方网站加载样式、List警告问题
  • ChatGPT-4助力学术论文提升文章逻辑、优化句式与扩充内容等应用技巧解析。附提示词案例
  • Android TextView 添加图标并实现换行
  • matplotlib pyton 如何画柱状图,利用kimi,直接把图拉倒上面,让他生成
  • 如何保证mysql数据库到ES的数据一致性
  • 安装MongoDB,环境配置
  • 家用无线路由器的 2.4GHz 和 5GHz