在Docker环境中备份MySQL并发送备份邮件

本文详细介绍了如何在Docker环境中备份MySQL数据库,并将备份文件通过邮件发送。首先,文章阐述了整体思路,包括备份数据库、发送邮件及清理旧备份。接着,讲解了邮件服务的前置准备,如在CentOS上安装邮件服务和下载证书。然后,提供了在Docker中执行MySQL备份的脚本,并指导如何设置定时任务以实现每日自动备份。最后,提醒读者可能会频繁收到备份邮件的通知。
摘要由CSDN通过智能技术生成

整体思路

  • 备份数据库
  • 发送备份文件至邮件
  • 清理30天前的备份

前置处理(邮件服务准备)

mailx 在CentOS中一般是安装好的, ~/.certs 针对SSL协议的邮件服务需要下载对应的邮件服务的证书

  1. 检测并安装邮件服务

    # 检测是否安装了邮件服务
    mail
    # 或
    mailx
    
    # 安装mail
    yum install -y mailx
    yum install -y nss-tools
    
  2. 下载邮件证书

这里以 QQ邮箱 为例,下载邮箱系统的SSL证书,确保系统信任该证书

```shell
mkdir -p ~/.certs
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ~/.certs/./ -i qq.crt
certutil -L -d ~/.certs
```
  1. 编辑配置文件

    1. 编辑邮件配置文件

      vim /etc/mail.rc
      
    2. 追加以下内容,根据实际情况变动

      set from=example@qq.com
      set smtp=smtps://smtp.qq.com:465                                              
      set smtp-auth-user=example@qq.com
      set smtp-auth-password=**************
      set smtp-auth=login
      set ssl-verify=ignore
      set nss-config-dir=/root/.certs
      
      示例含义
      set from=example@qq.com发送邮箱
      set smtp=smtps://smtp.qq.com:465发件服务器
      set smtp-auth-user=example@qq.com发件用户名
      set smtp-auth-password=**************邮箱密码或授权码
      set smtp-auth=login连接方式,用login即可
      set ssl-verify=ignore启用ssl
      set nss-config-dir=/root/.certs证书位置
  2. 测试发送邮件

    echo "邮件正文" | mail -s "邮件主题" example@qq.com
    

在Docker中备份MySQL

  1. 备份脚本

    1. 创建脚本

      copy以下内容,创建备份脚本backup.sh

      #!/bin/bash
      # 变量
      env_name="xxxx环境"
      docker_name="dockerId_forMySQL"
      base_data_dir="/home/backup/mysql/"
      
      date_str="`date +%Y%m%d`"
      base_name="data_`date +%Y%m%d`"
      data_dir="$base_data_dir/$base_name"
      file_path="$data_dir/data_`date +%Y%m%d`.sql"
      
      if [ ! -d $data_dir ]; then
          mkdir $data_dir
      fi
      
      # 备份操作
      docker exec -it ${docker_name} mysqldump -uroot -proot --all-databases > $file_path
      if [ $? -ne 0 ];then
          # 任务失败,发送邮件
          echo -e $env_name$date_str"备份失败" | mailx -s $env_name$date_str'备份失败' example@qq.com
          exit -1
      fi
      
      echo "备份完成"
      
      cd $data_dir
      zip $base_name.zip -r $data_dir
      zip -s 45m $base_name.zip --out s_$base_name.zip
      echo "分卷完成"
      find $base_data_dir -name 's_data_[1-9]*'
      
      # 获取分卷的压缩包集合
      for file in $data_dir/s_*
      do
          echo $file
          # 任务成功,发送邮件
          echo -e $env_name$date_str"备份成功\n"$file | mailx -s $env_name$date_str'备份成功' -a $file example@qq.com
          echo "发件完成"
      done
      
      # 清理30天前的备份
      find $base_data_dir -mtime +30 -name 'data_[1-9]' -exec rm -rf {} \;
      echo "清理完成"
      
    2. 测试脚本

      sh backup.sh
      
  2. 编辑定时任务

    1. 进入编辑页面
      crontab -e
      
    2. 追加定时执行
      # 不带日志
       0 4 * * * sh /path/backup.sh
      # 带日志
      0 4 * * * sh /path/backup.sh > /path/backup.log 2>&1
      

亲,做好被邮件轰炸的准备吧,因为到这里,你已经配置完成,每天接收 N 份的邮件,(#.#)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值