这里主要说下,监控mysql 服务并发送邮件的一个栗子,主要内容包括:
- 邮件发送
- 简单的监控脚本
1.邮件发送
先说下我这里的环境:ubuntu 16.04 LTS ,在ubuntu 下发送邮件是需要安装发送邮件的软件的,而在centos 下是不需要的(亲测 centos os 7.4)。这里以ubuntu 为例说下在Ubuntu 下如何发送邮件。
先安装软件
root@zhang:/home/zhang# apt-get install heirloom-mailx
然后打开/etc/s-nail.rc 文件,在行末编辑进行配置:
168 set from=15003655146@163.com
169 set smtp=smtp.163.com
170 set smtp-auth-user=15003655146@163.com
171 set smtp-auth-password=xxx # 网易邮箱授权码,不是密码
172 set smtp-auth=login
说明:
from: 对方收到邮件时显示的发件人
smtp: 指定第三方发送邮件的smtp服务器地址
smtp-auth: SMTP的认证方式。默认是LOGIN,也可改为CRAM-MD5或PLAIN方式
smtp-auth-user: 第三方发邮件的用户名
smtp-auth-password: 用户名对应密码
测试邮件发送
root@zhang:/home/zhang/Code/Shell# mail -s "hello world" "1939229834@qq.com" < success.txt
-s 选项指定主题
< success.txt 指从success.txt 文件中读取要发送的内容
OK,到这里表示邮件发送成功!
2.监控脚本
判断mysql 有没有跪的方式有好几种,这里说下:"模拟web 服务器,通过mysql 账户连接mysql ,然后根据返回命令状态或返回内容确认mysql 是否正常 " ,这种方式来判断mysql 是否跪了。
在写具体的脚本之前,先看下命令及执行结果:
root@zhang:/home/zhang/Code/Shell# mysql -hlocalhost -uroot -p'referee' -e "select version();"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| version() |
+------------+
| 5.7.22-log |
+------------+
root@zhang:/home/zhang/Code/Shell# echo $?
0
root@zhang:/home/zhang/Code/Shell# mysql -hlocalhost -uroot -p'referee' -e "select version_1();"
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1046 (3D000) at line 1: No database selected
root@zhang:/home/zhang/Code/Shell# echo $?
1
root@zhang:/home/zhang/Code/Shell#
OK,基于这个思路:执行成功,$? 是0 ,否则非0 ,来编写shell 监控脚本。
这里先直接上已撸好的shell
1 #! /bin/bash
2
3 mysqlStatus=`mysql -hlocalhost -uroot -p'referee' -e "select version();" >&/ dev/null`
4
5 if [ $? -ne 0 ] ;then
6
7 mail -s "mysql abnormal" "1939229834@qq.com" < mysql_service_abnorma l.txt
8
9 service mysql restart
10
11 sleep 5
12
13 mysqlStatus=`mysql -hlocalhost -uroot -p'referee' -e "select versio n();" >&/dev/null`
14
15
16 if [ $? -eq 0 ];then
17
18 mail -s "mysql restart successful" "1939229834@qq.com" < suc cess.txt
19 else
20 mail -s "mysql restart failed" "1939229834@qq.com" < failed. txt
21 fi
22 fi
23
比较简单,先用账号密码连接mysql ,然后执行语句。如果返回值0 表示OK,什么都不做,非0 发邮件通知mysql 服务异常,
然后尝试重启mysql 服务,5秒过后再用账号密码连接执行语句,看返回值,为0 发送成功邮件,否则发送失败邮件。
OK,下面测试脚本:
先停止mysql 服务:
service mysql stop
使用service mysql status 命令可以查看mysql 服务状态
root@zhang:/home/zhang/Code/Shell# service mysql status
● mysql.service - LSB: start and stop MySQL
Loaded: loaded (/etc/init.d/mysql; bad; vendor preset: enabled)
Active: inactive (dead) since 日 2018-11-11 22:56:09 CST; 21s ago
Docs: man:systemd-sysv-generator(8)
Process: 20607 ExecStop=/etc/init.d/mysql stop (code=exited, status=0/SUCCESS)
Process: 19334 ExecStart=/etc/init.d/mysql start (code=exited, status=0/SUCCESS)
11月 11 22:46:38 zhang systemd[1]: Starting LSB: start and stop MySQL...
11月 11 22:46:38 zhang mysql[19334]: Starting MySQL
11月 11 22:46:40 zhang mysql[19334]: .. *
11月 11 22:46:40 zhang systemd[1]: Started LSB: start and stop MySQL.
11月 11 22:56:07 zhang systemd[1]: Stopping LSB: start and stop MySQL...
11月 11 22:56:07 zhang mysql[20607]: Shutting down MySQL
11月 11 22:56:09 zhang mysql[20607]: .. *
11月 11 22:56:09 zhang systemd[1]: Stopped LSB: start and stop MySQL.
root@zhang:/home/zhang/Code/Shell# date
2018年 11月 11日 星期日 22:56:35 CST
执行脚本,发现不仅收到了邮件,而且mysql 服务正常重启OK。
注: 这里执行脚本务必要以root 账号来操作,因为其它账号执行service mysql restart 操作可能需要要求输入密码。