整体思路
- 备份数据库
- 发送备份文件至邮件
- 清理30天前的备份
前置处理(邮件服务准备)
mailx
在CentOS中一般是安装好的,~/.certs
针对SSL协议的邮件服务需要下载对应的邮件服务的证书
-
检测并安装邮件服务
# 检测是否安装了邮件服务 mail # 或 mailx # 安装mail yum install -y mailx yum install -y nss-tools
-
下载邮件证书
这里以
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
```
-
编辑配置文件
-
编辑邮件配置文件
vim /etc/mail.rc
-
追加以下内容,根据实际情况变动
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 证书位置
-
-
测试发送邮件
echo "邮件正文" | mail -s "邮件主题" example@qq.com
在Docker中备份MySQL
-
备份脚本
-
创建脚本
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 "清理完成"
-
测试脚本
sh backup.sh
-
-
编辑定时任务
- 进入编辑页面
crontab -e
- 追加定时执行
# 不带日志 0 4 * * * sh /path/backup.sh # 带日志 0 4 * * * sh /path/backup.sh > /path/backup.log 2>&1
- 进入编辑页面
亲,做好被邮件轰炸的准备吧,因为到这里,你已经配置完成,每天接收 N 份的邮件,(#.#)