今天分享一下昨天写好的一个备份数据库并以附件形式发送到邮箱的一个shell脚本
首先我是用mutt来发送邮箱,所以我安装了mutt和msmtp。
安装方法如下:
yum install mutt
yum install msmtp
因为我用的是centos系统,如果是ubuntu需要将yum改成apt-get,还有我用的是管理员账号,如果是普通账号可能需要在前面加上sudo(因为我没有测试过,不知道普通账号有没有权限问题)
如果你安装完应该可以在/etc/目录下找到Muttrc这个配置文件,编辑此文件,往文件最后添加下面几行
set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="发送者"
set from=邮箱地址
set envelope_from=yes
你可以直接执行下面命令
echo 'set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="name"
set from=邮箱地址
set envelope_from=yes' >> /etc/Muttrc
特别说明一下,邮箱地址指的是你发送邮件的邮箱,此邮箱需要开通SMTP服务,你可以使用网易的、腾讯的SMTP服务,具体开通教程自己百度。
接下来你需要在主目录(也可以说是家目录)新建.msmtprc 和 .msmtp.log这两个文件
.msmtprc是msmtp的配置文件,.msmtp.log是一个日志文件,你不需要开启可以不用新建
注意:这里的主目录是你发送邮件的用户的主目录
然后在.msmtprc文件中加入以下内容
account default
host STMP服务器地址
#from 你要发送到哪个邮箱(也可以不设置,在发送邮箱的命令加上邮箱参数就可以了)
auth plain
user 开通了SMTP邮箱的邮箱地址
password 授权密码
logfile ~/.msmtp.log
当你以上都配置完mutt就可以发送邮件了
下面我们来看一下数据库备份的脚本
#!/bin/bash
mysql_user="登录数据库用户名"
mysql_name="你要备份的数据库"
mysql_pwd="数据库登录密码"
#要备份的数据库信息
d=`date "+%Y-%m-%d"`
t="MySQL Backup - $d"
#发送邮件标题和内容,这里以天来区分,因为我是每天备份一次
BackName=backup_mysql_$d
#数据库文件名称
BackPath=/mysqlBack/
#备份数据库存放路径,我们也可以定期SFTP去下载
mysqldump -u${mysql_user} -p${mysql_pwd} $mysql_name > $BackPath$BackName.sql
#导出数据库
tar -czPf $BackPath$BackName.tar.gz $BackPath$BackName.sql
#压缩数据库包,这样节省空间
echo "$t"|mutt -s "$t" '你要发送到的邮箱地址' -a $BackPath$BackName.tar.gz
#下面是定时删除以前的备份文件(这里没有做优化,只是删除第前5天的备份,如果第前6天的没删除,你执行此脚本不会删除第前6天的备份)
days=5 #我设置了删除5天前的
backName=backup_mysql_
day=`date -d "$days days ago" +%Y-%m-%d`
rm -f $BackPath$backName$day.sql $BackPath$backName$day.tar.gz
exit
#退出当前脚本
提醒一下,你备份的数据库存放目录一定是要存在的,不存需要提前创建好
当然你也可以为脚本添加执行权限
chmod +x 脚本路径
这样你就可以直接路径运行脚本了
最后我们只需要写定时任务就好了
crontab -e
然后添加
30 0 * * * bash /root/back.sh
上面的意思是每天的凌晨12点半执行一次脚本