service mysqld status
只要数据库服务崩溃了,后面的请求就都会出错,所以想用一种方法来监控服务器数据库服务的状态。自己想了几种方案,大致分为两类 1.当有请求到来时,如果发生数据库连接错误,就(通过邮件或者短息)推送信息给管理员,管理员手动去重启数据库服务。 2.在系统中设置一个定时任务,每隔一段时间检查一次数据库服务状态,如果服务停了就重启并通知管理员。 这里介绍的是第二种方法,主要通过shell脚本实现,下面具体说明如何实现。 首先检测Mysql的状态
#!/bin/bash
pgrep -x mysqld &> /dev/null
if [ $? -ne 0 ]
then
echo "At time: `date` :MySQL is stop .">> /var/log/mysql_messages
service mysql start
#echo "At time: `date` :MySQL server is stop."
else
echo "MySQL server is running ."
fi
将上述脚本保存到mysql.sh中,上传到服务器,运行该脚本可以发现输出数据库服务正在运行
这里我还出现一个小插曲,就是shell脚本总是运行错误,可以参考下面。原来是windows系统和类Unix系统的换行符不一样。shell编程报错:“syntax error near unexpected token `” - xyp84的专栏 - 博客频道 - CSDN.NET解决方法参考下面任意一个就行了:Notepad++中Windows,Unix,Mac三种格式之间的转换 - 如月王子的个人空间 - 开源中国社区dos格式的文件转换为unix格式 - leipei - 博客园如果是用sublime编辑器还可以参考Sublime Text2 默认语言格式(windows/unix)设置,快捷键 - 鸿网互联[68IDC.CN]脚本如果还执行不了的可能性是文件没有执行权限
# sh mysql.sh
MySQL server is running
每隔一定时间自动运行脚本
linux上定期执行脚本用的是cron进程
命令:crontab -e
输入(如果不能输入,按键盘上的Insert键就能输入了)
*/5 * * * * /your_dir/mysql.sh
编辑完毕,按ESC键退出,输入:wq保存后退出。
重启cron就可以了
service cron restart
使用上面的shell脚本并不会推送数据库状态消息给管理员,这里就要借助我以前写的一篇博客了。
Centos7-mqtt消息中间件mosquitto的安装和配置
借助mosquitto服务可以将消息推送到管理员客户端。服务器发布主题为“mysql_status”的消息,再使用客户端来接收该消息。
#!/bin/bash
pgrep -x mysqld &> /dev/null
if [ $? -ne 0 ]
then
mosquitto_pub -t mysql_status -m "Failed"
service mysql start
#echo "At time: `date` :MySQL server is stop."
else
mosquitto_pub -t mysql_status -m "Running"
fi
import paho.mqtt.client as mqtt
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
client.subscribe("mysql_status")
#订阅,第一个参数是订阅的主题
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("主机名或ip", 1883, 60)
#第一个参数为主机名,及Mosquitto所在服务器,第二个参数是端口
# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
# Other loop*() functions are available that give a threaded interface and a
# manual interface.
client.loop_forever()
参考: shell脚本:监控MySQL服务是否正常_数据库技术_Linux公社-Linux系统门户网站
Linux下定时任务的查看及取消 - Brin的日志 - 网易博客
来自为知笔记(Wiz)