mysql 田_MySQL监控脚本

前段时间,主机的MySQL服务无缘无故会自动关闭,以前从没出过这种情况,于是看了下mysql的错误日志,如下所示:

08f9ee338b66974e4faeb61bf0d97f1b.png

以为是内存分配不够,便调大了内存,过了几天后,依然出现mysql服务自动关闭的情况,无奈之下,开始写了脚本监控mysql。

mysql的监控方式有多种,如,通过查看端口号和进程是否存在来检测mysql服务是否正常,或者通过端口和主机连接mysql,但当CPU负载很高时,会出现端口在服务可能不正常的情况,一般最佳方式为通过php/java程序进行 url 监控,然后在脚本中利用URL的返回值判断mysql服务是否正常,然后在执行其他操作。使用此方法时,需要在网站子目录中提供一个php或java监控程序。

一,通过php脚本进行 url 监控

1)在网站根目录下提供一个php脚本

[root@sta html]# cat php-mysql.php

$link=mysql_connect('127.0.0.1','root','123456'); /*主机 用户 密码 */

if(!$link) echo "failed";

else echo "success";

?>

此脚本返回值为“failed”或者“success”。

2)定义脚本监控。

#/bin/bash

LogPath=/tmp/mysql.log

URL=www.tianfeiyu.com

Result=`curl --connect-timeout 5 -s $URL/php-mysql.php`

ServiceScript=/etc/init.d/mysqld

LockFile=/var/lock/subsys/mysqld

[ -f $LogPath ] && > $LogPath || touch $LogPath

if [ "$Result" == "success" ];then

echo -e "\033[32mdb is running.\033[0m" >> $LogPath

else

echo -e "\033[32mdb is down , 正在尝试重新启动!\033[0m" >> $LogPath

[ -e $LockFile ] && rm -f $LockFile #删除锁文件

[ -x $ServiceScript ] && $ServiceScript start >> $LogPath

sleep 3

Result=`curl --connect-timeout 5 -s $URL/php-mysql.php`

if [ "$Result" != "success" ];then

echo -e "\033[32m重启失败,正在杀死服务尝试再次重启!\033[0m" >> $LogPath

while true

do

killall mysqld &> /dev/null

[ $? -ne 0 ] && break #杀尽会显示 mysqld: no process killed,此时$?不为0

sleep 1

done

$ServiceScript start >> $LogPath && status="successful"||status="failure"

mail -s "mysqld startup status is $status" root@localhost.localdomain < $LogPath

fi

fi

说明:LogPath 脚本执行中产生的信息,URL使用主机或域名,Result是php脚本的返回信息,ServiceScript服务脚本,LockFile锁文件。

二,通过端口和进程进行监控

注意:文件名中不要使用mysql关键字。

#/bin/bash

LogPath=/tmp/mysql.log

portNum=`ss -ltn| grep 3306|wc -l` #端口数

mysqlProcessNum=`ps -ef|grep mysqld |grep -v grep |wc -l` #进程数,一般是2个,需要自己查看

LockFile=/var/lock/subsys/mysqld

ServiceScript=/etc/init.d/mysqld

[ -f $LogPath ] && > $LogPath || touch $LogPath

if [ $portNum -eq 1 -a $mysqlProcessNum -eq 2 ];then

echo -e "\033[32mdb is running.\033[0m" >> $LogPath

else

echo -e "\033[32mdb is down , 正在尝试重新启动!\033[0m" >> $LogPath

[ -e $LockFile ] && rm -f $LockFile

[ -x $ServiceScript ] && $ServiceScript start >> $LogPath

sleep 3

portNum=`ss -ltn| grep 3306|wc -l`

mysqlProcessNum=`ps -ef|grep mysqld |grep -v grep |wc -l`

if [ $portNum -ne 1 -o $mysqlProcessNum -ne 2 ];then

echo -e "\033[32m重启失败,正在杀死服务尝试再次重启!\033[0m" >> $LogPath

while true

do

killall mysqld &> /dev/null

[ $? -ne 0 ] && break #杀尽会显示 mysqld: no process killed,此时$?不为0

sleep 1

done

$ServiceScript start >> $LogPath && status="successful"||status="failure"

mail -s "mysqld startup status is $status" root@localhost.localdomain < $LogPath

fi

fi

然后让脚本运行在后台就可以正常工作了。

DevOps-田飞雨 》》转载请注明源地址

喜欢 (1)or分享 (0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值