LINUX 脚本监听MYSQL

方法一:采用监听mysql端口和进程的方式

作为新手参考了些资料,代码如下:

#!/bin/bash
#liud
#function:监控mysql状态,出现异常则启动mysql
LOG_DIR=/data/monitor/
EMAIL_PATH=/server/scripts/email.txt
LOG_FILE=mysql_`date +%Y-%m-%d`.log
NowTime=`date +%Y-%m-%d_%H:%M:%S`
DB_PATH=/etc/init.d/mysql
# 日志目录不存在,则创建
[ ! -d $LOG_DIR ] && mkdir -p $LOG_DIR
# 查看mysql 3306的监听端口, wc -l转换成数字
portNum=`netstat -lnt|grep 3306|wc -l`
# 查看mysql的进程, wc -l转换成数字
mysqlProcessNum=`ps -ef|grep mysql|grep -v grep|wc -l`
if [ $portNum -eq 1 ] && [ $mysqlProcessNum -eq 2 ];then
	# >>$LOG_DIR/$LOG_FILE 将mysql当前状态追加写入日志文件中
	echo "${NowTime}, db is running." >>$LOG_DIR/$LOG_FILE
else
	# >>$LOG_DIR/$LOG_FILE 将mysql当前状态追加写入日志文件中
	echo "--${NowTime}, db is not running.--" >>$LOG_DIR/$LOG_FILE
	# service mysql start >>$LOG_DIR/$LOG_FILE && status="success"||status="failure"
	# 启动mysql
	${DB_PATH} start>/dev/null
	# 等待30秒查看状态
	sleep 30
	# 重新查看mysql的端口和进程
	portNum=`netstat -lnt|grep 3306|wc -l`
	mysqlProcessNum=`ps -ef|grep mysql|grep -v grep|wc -l`
	if [ $portNum -ne 1 ] || [ $mysqlProcessNum -ne 2 ];then
		# 重启失败,则暴力杀掉mysql的进程 杀完后$?会返回1,对应的是没有进程可杀了,跳出循环 再次启动mysql
		while true
		do
			echo "${NowTime},killall mysqld.">>$LOG_DIR/$LOG_FILE
			killall mysqld >/dev/null 2>&1
			[ $? -ne 0 ] && break
			sleep 1
		done
		#service mysql start 直接执行脚本可以启动,但是放在crond里面就不行,不明白为什么
		${DB_PATH} start>/dev/null&& status="success"||status="failure"
	else
		status="success"
	fi
	# 将mysql启动状态追加写入日志文件
	echo "${NowTime},mysql startup status is $status.">> $LOG_DIR/$LOG_FILE
	#发送邮件提示
	for email_num in `cat $EMAIL_PATH`
	do
		mail -s "${NowTime},mysql startup status is $status." $email_num <$LOG_DIR/$LOG_FILE
	done
fi

以上脚本,存在的缺陷是,MySQL虽然启动了,但是不一定就能正常连接,比如挂载满了,数据库锁住了,等等.最好的方式就是模拟用户连接数据库是否能正常连接来判断数据库当前是否正常.后面会讲到.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值