近日公司没有新的需求,闲来无事想起之前看到的定时自动备份数据库的脚本挺有意思的.
研究准备之余考虑到备份脚本存在服务器上不是很方便和安全于是脚本中加上了发送邮件的功能,话不多说让我们开始..............
步骤1 安装并配置mutt
yum -y install mutt #安装mutt
接下来配置mutt
vim /etc/Muttrc
set use_from=yes
set use_envelope_from=yes
set realname="your mail name" #你指定的邮箱名字可随意填写
set from="yourmail@qq.com" #配置的邮箱作为邮件的发送方
set sendmail="/usr/local/msmtp/bin/msmtp -C /etc/msmtprc" #msmtp服务的路径 -C为指定msmtp的配置文件
步骤2 安装并配置msmtp
由于阿里云对25端口封禁,我这边选择源码编译的方式安装(这里卡了很久,安装完成后发送邮件不报错但就是死活收不到邮件)
wget https://marlam.de/msmtp/releases/msmtp-1.8.1.tar.xz
解压缩包
xz -d msmtp-1.8.1.tar.xz
tar -xvf msmtp-1.8.1.tar
cd msmtp-1.8.1
yum -y install gnutls gnutls-devel gnutls-utils openssl openssl-devel libidn libidn-devel #相关依赖安装
./configure --prefix=/usr/local/msmtp --sysconfdir=/etc/ --with-ssl=openssl && sudo make && sudo make install #编译安装 指定安装目录 配置文件目录 添加ssl加密支持
配置msmtp
vim /etc/msmtprc #创建或编辑msmtp配置文件
account qqmail #指定邮箱账户名
tls on
auth on
tls_starttls off
tls_trust_file /etc/ssl/certs/ca-bundle.crt
host smtp.qq.com
port 465 #使用ssl安全连接465端口 25端口被阿里云封禁,配置出入站规则都不行,其他服务器可自行测试
user yourmail@qq.com
from yourmail@qq.com
password ******* #IMAP/SMTP服务授权码,授权之后才可以使用该邮箱发送邮件 设置位置在:设置-->账户-->IMAP/SMTP开启该服务后得到的授权码.如下图位置
image.png
修改msmtprc文件的权限,因为文件涉及了敏感信息
chmod 600 /etc/msmtprc
测试邮件发送,成功接收到邮件
echo "hello" | msmtp -a qqmail -C /etc/msmtprc yourmail@qq.com
image.png
步骤3 编写shell脚本
cd /home
vim auto_sql_backup.sh #创建shell脚本文件
#!/bin/bash
export LANG=en_US.UTF-8 #防止中文乱码
baktime=$(date +%Y-%m-%d_%H-%M-%S) #备份时间
bakname=all_bak.${baktime}.sql #备份文件名
ip=`/sbin/ifconfig eth0 | grep "inet" | awk '{print $2}' | awk '{print $1}'` #获取服务器ip awk -F指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。缺省则表示按空格或者Tab分割
mac=`/sbin/ifconfig | grep "ether" | awk '{print $2}'` #获取服务器mac
passwd='yourpass' #数据库密码
mysqldump -uroot -p$passwd --all-databases > /home/tqj/backup/${bakname} #导出需要备份的数据
tar zcf /home/tqj/backup/${bakname}.tar.gz -C /home/tqj/backup/ ${bakname} #解压备份文件到指定目录
echo "服务器IP:${ip} 机器MAC:${mac} 备份时间:${baktime} 请查收附件" | mutt yourmail@163.com -s "IP${ip}数据库全>库定时备份${baktime}" -a /home/tqj/backup/${bakname}.tar.gz #发送备份文件为附件的邮件到目标邮箱
rm -f /home/tqj/backup/${bakname}.tar.gz #删除备份压缩包
rm -f /home/tqj/backup/${bakname} #删除备份文件
给脚本添加执行权限
chmod 777 /home/auto_sql_backup.sh
添加定时任务
crontab -e #编辑方式与vim命令相同
0 * * * * /home/auto_sql_backup.sh #每小时执行一次
0 0 * * * /home/auto_sql_backup.sh #每天执行一次备份
至此相关功能全部实现,谨以此记录!希望能帮到有需要的人.
网友评论