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

【网络云计算】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_FILE
    if [ $? -ne 0 ]; then
        echo "Database backup failed" >> $LOG_FILE
        exit 1
    fi
    
    # 获取数据库文件大小和列表
    DB_SIZE=$(du -sh $BACKUP_FILE | awk '{print $1}')
    DB_FILES=$(ls -l $BACKUP_FILE)
    
    echo "Database backup size: $DB_SIZE" >> $LOG_FILE
    echo "$DB_FILES" >> $LOG_FILE
    
    # 打包并压缩,同时设置密码保护
    echo "$TAR_PASS" | tar --password-file=- -czf $TAR_FILE $BACKUP_FILE
    if [ $? -ne 0 ]; then
        echo "Tar compression failed" >> $LOG_FILE
        exit 1
    fi
    
    # 计算MD5值
    md5sum $TAR_FILE > $MD5_FILE
    MD5_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" $EMAIL
    if [ $? -eq 0 ]; then
        echo "Email with MD5 checksum sent" >> $LOG_FILE
    else
        echo "Failed to send email with MD5 checksum" >> $LOG_FILE
    fi
    
    # 发送包含所有信息的邮件(可选)
    mail -s "$SUBJECT" -a "$TAR_FILE" "$EMAIL" <<< "$BODY"
    if [ $? -eq 0 ]; then
        echo "Email with backup file sent (as attachment)" >> $LOG_FILE
    else
        echo "Failed to send email with backup file" >> $LOG_FILE
    fi
    
} >> $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.kler.cn/a/456271.html

相关文章:

  • 【从0带做】基于Springboot3+Vue3的高校食堂点餐系统
  • C# 编程系列:网络通信之TCP通信(第一篇:介绍TCP协议在C#中的基本概念和工作原理)
  • wordpres当前分类调用父分类的名称和链接
  • Vue3响应式:Proxy设计原理解析
  • 在 Linux 中如何使用粘滞位 (t-bit)共享文件
  • 基于websocket实现本地web语音聊天
  • 每日一题 347. 前 K 个高频元素
  • 数据库原理及应用(MySQL版-李月军)-习题参考答案
  • 【RabbitMQ】超详细Windows系统下RabbitMQ的安装配置
  • 如何使用fetch函数获取多个数据并同时使用(在嵌套的fetch函数之间传递数据)
  • 如何为运行在 PICO 4 Ultra 设备上的项目设置外部文件读写权限?
  • pdf有密码,如何实现pdf转换word?
  • 易基因: BS+ChIP-seq揭示DNA甲基化调控非编码RNA(VIM-AS1)抑制肿瘤侵袭性|Exp Mol Med
  • 在K8S中,nodePort的externalTrafficPolicy字段有什么作用?
  • Vue.js组件开发-如何实现vueFLow流程
  • pyqt6 OpenCV相关练习
  • 【信息系统项目管理师】高分论文:论信息系统项目的资源管理(移动警务通系统)
  • 如何在 Ubuntu 22.04 上安装 Elasticsearch
  • 【Maven】聚合与继承
  • 算法论文/目标检测4——介绍DETR家族到DINO的发展史