Centos Mysql 实现自动备份发送到指定邮箱
Linux Mysql 实现自动备份
邮箱选择:mail 方式发送邮箱
邮箱应用场景
很多时候我们在使用shell监控脚本的时候(例如:Mysql,nginx,等等),当监控的服务出现问题的需要通过邮箱(当然也可以使用微信、短信或者钉钉)通知给管理员。
1.先判断本身系统是否有mail
which mail
![](https://img.haomeiwen.com/i20385828/32eaa93d696472dd.png)
1.1 系统没有mail 安装命令 (需要连接外网)
yum install mailx -y
1.2 修改配置文件
vim /etc/mail.rc
set smtp=smtps://smtp.163.com:465
set from=remake@163.com 换成你自己的邮箱地址
set smtp-auth=login
set smtp-auth-user= remake@163.com 换成你自己的邮箱地址
set smtp-auth-password=yournumber 注意:你的授权码,使用smtp需要打开授权
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
1.3 打开授权(163邮箱)
![](https://img.haomeiwen.com/i20385828/6867d0dfa943342d.png)
![](https://img.haomeiwen.com/i20385828/1fae4109372d9998.png)
![](https://img.haomeiwen.com/i20385828/0e0c47c0da6fa402.png)
注意:别忘记你的授权码,只能看一次(记得保存)
![](https://img.haomeiwen.com/i20385828/884223f1676eb1d4.png)
把授权码复制到 配置文件 set smtp-auth-password=yournumber
1.4测试发送
echo "测试邮件" | mail -s "测试" remake@163.com
假如没有收到可以看看垃圾箱,有没有收到,有些会默认走到垃圾箱
1.5 mail常用命令
echo "测试邮件" | mail -s "测试" remake@163.com
-s表示主题,"< mail.txt"表示把mail.txt里的内容作为邮件正文
也可以用cat mail.txt的输出作为mail命令的标准输入,作为邮件正文
-c表示抄送的地址 remake@126.com是直接发送的地址
2.1.创建需要备份的文件夹
名字可以随便创建
mkdir /home/dbback
cd /home/dbback
2.2.创建 shell 脚本
名字随便起
vim bkDatabaseName.sh
2.2 .1 复制粘粘 内容 (这是备份为 sql 文件)!根据需要来选取
注意:
把 username 替换为实际的用户名;
把 password 替换为实际的密码;
把DatabaseName 替换为实际的数据库名;
#!/bin/bash
mysqldump -uusername -ppassword DatabaseName >/home/dbback/DatabaseName_$(date +%Y%m%d_%H%M%S).sql
2.2.2 对备份进行压缩:(这是备份为 sql 压缩 文件)!根据需要来选取
注意 :mysql备份只能识别后缀sql.gz 文件,不能识别 sql.tar.gz
#!/bin/bash
mysqldump -uusername -ppassword DatabaseName | gzip >/home/dbback/DatabaseName_$(date+%Y%m%d_%H%M%S).sql.gz
2.3.添加可执行权限
注意:名字对应脚本名字
chmod u+x bkDatabaseName.sh
添加可执行权限之后先执行一下,看看脚本有没有错误,能不能正常使用;
./bkDatabaseName.sh
sh bkDatabaseName.sh
注意可能这里会报错:(可以忽略,因为邮件已经发送)
Warning: Using a password on the command lineinterface can be insecure.
这是因为: 导出MySQL数据库的时候采用mysqldump命令,出现"Warning: Using a password on the command line interface can beinsecure."的错误提示,当然数据库肯定也没有能备份下来。这个问题应该是在MySQL5.6+版本的时候就有出现,可能是为了确保数据库的安全性采用的保护机制。
解决方法、修改数据库配置文件
我们需要修改数据库配置文件,这个要看我们数据库的配置的,有些是在/etc/my.cnf,有些是/etc/my.conf
![](https://img.haomeiwen.com/i20385828/a0ed2669b93e8ff4.png)
我们需要在[client]部分添加脚本:
host=localhost
user=数据库用户
password='数据库密码'
3. 加上邮件发送 完整脚本
我创建脚本 /home/dbback/
注意:里面根据自己的要求修改名字路径!
#!/bin/bash
mysqldump -u'账号' -p'密码' '备份的数据库' | gzip >/home/dbback/test_$(date -d today +%Y%m%d).sql.gz
echo 'email 测试' | mail -a /home/dbback/test_$(date -d today +%Y%m%d).sql.gz -s 'mail sql' remake@163.com
rm -rf /home/dbback/test_$(date -d today +%Y%m%d).sql.gz
3.1加上脚本权限
chmod u+x bkDatabaseName.sh
4.添加计划任务
也可以 查看这个: https://www.jianshu.com/p/847ec50a65c3
首先 输入代码检测是否安装 crontab
rpm -qa | grep crontab
![](https://img.haomeiwen.com/i20385828/123f259170b0ab2a.png)
如果没安装会显示: -bash: crontab: commandnotfound
分别执行这两个命令。
yum -y install vixie-cron
yum -y install crontabs
简单说明:(偏一下题)
vixie-cron 是 cron 的主程序;
crontabs 是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看crontab服务状态
同样可以设置开机自启动:
chkconfig --level 345 crond on
正题
输入命令:(这时候会打开类似 vim 的编辑器)
crontab -e
输入内容:(这个是一分钟执行一次备份)
*/1 * * * * /home/backup/bkDatabaseName.sh
4.1测试任务是否执行
很简单,我们就执行几次“ls”命令,看看一分钟过后文件有没有被创建就可以了!
如果任务执行失败了,可以通过以下命令查看任务日志
# tail -f /var/log/cron
类似会出现这种:
![](https://img.haomeiwen.com/i20385828/2b707d70d95fbecc.png)