数据库自动备份并发送至指定邮箱 linux mail mysqldump
环境与工具
-
操作系统:centos 7
-
数据库:mysql
-
邮件发送工具:mail
-
数据库备份工具:mysqldump
mail的安装与配置
$yum install mailx $vim /etc/mail.rc #以下内容添加至文件末尾 set from= 代发邮件的邮箱用户名,如(xxxxxx@163.com) set smtp= smtp.163.com set smtp-auth-user= 邮箱smtp授权用户名,一般与上面的邮箱用户名一致如(xxxxxx@163.com) set smtp-auth-password= 在邮箱设置里设置的授权密码 set smtp-auth=login
设置完,mail就能通过设置的smtp代发服务器发送邮件了.相比较mail默认使用的sendmal是比较方便的.
测试命令
$echo "我是测试邮件" | mail -s "Linux外部邮箱发信测试" -a 附件全名 目的邮箱
备份数据库并发送到指定邮箱的shell脚本,如sqlbakmail.sql
#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH #数据库用户名 dbuser='数据库用户名' #数据库用密码 dbpasswd='数据库密码' #需要备份的数据库,多个数据库用空格分开 dbname='数据库名称' #备份时间 backtime=`date +%Y%m%d%H%M%S` #日志备份路径 logpath='/opt/mysqlbak' #数据备份路径 datapath='/opt/mysqlbak' #接收备份文件的邮件客户端 mailuser='xxxxxx@163.com' #邮件内容 content='烂笔头数据库备份'`date +%Y%m%d%H%M%S` #邮件主题 subject='烂笔头数据库备份文件,由系统自动发出,请勿删除!' #日志记录头部 echo "备份时间为${backtime},备份数据库表 ${dbname} 开始" >> ${logpath}/log.log #正式备份数据库 for table in $dbname; do source=`mysqldump -q -u ${dbuser} -p${dbpasswd} ${table}> ${logpath}/${backtime}.sql` 2>> ${logpath}/mysqllog.log; #备份成功以下操作 if [ "$?" == 0 ];then cd $datapath #为节约硬盘空间,将数据库压缩 tar jcf ${table}${backtime}.tar.bz2 ${backtime}.sql > /dev/null #删除原始文件,只留压缩后文件 rm -f ${backtime}.sql #删除七天前备份,也就是只保存7天内的备份 #find $datapath -name "*.tar.bz2" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1 echo "数据库 ${dbname} 备份成功!!" >> ${logpath}/mysqllog.log #发送邮件 echo ${subject} | mail -s ${content} -a ${table}${backtime}.tar.bz2 ${mailuser} #邮件发送成功执行以下操作 if [ "$?" == 0 ];then echo "数据库文件${table}${backtime}发送成功!!" >> ${logpath}/maillog.log #发送成功后 删除数据库文件 节省空间 rm -f ${table}${backtime}.tar.bz2 else #邮件发送失败执行以下操作 echo "数据库${table}${backtime}发送失败!!" >> ${logpath}/maillog.log fi else #备份失败则进行以下操作 echo "数据库表 ${dbname} 备份失败!!" >> ${logpath}/mysqllog.log fi done
制定计划任务,执行备份以及发送邮件
$vim /etc/crontab #在文件末尾添加 00 04 * * * root /opt/script/sqlbakmail.sql