问题描述:监控MYSQL服务是否正常启动,如果未正常启动,就启动MYSQL
判断mysql的方法:
1)端口判断
1
2
|
[root@localhost ~] # netstat -lntup | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2288 /mysqld
|
2)进程判断
1
2
3
4
|
[root@localhost ~] # ps -ef | grep mysqld
mysql 2071 1 0 11:32 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe --basedir= /usr
mysql 2288 2071 0 11:32 ? 00:00:24 /usr/libexec/mysqld --basedir= /usr --datadir= /var/lib/mysql --plugin- dir = /usr/lib64/mysql/plugin --log-error= /var/log/mariadb/mariadb .log --pid- file = /var/run/mariadb/mariadb .pid --socket= /var/lib/mysql/mysql .sock
root 10097 6962 0 17:27 pts /1 00:00:00 grep --color=auto mysqld
|
3)返回值判断
1
2
3
|
[root@localhost ~] # mysql -uroot -proot -e "select version();" &>/dev/null
[root@localhost ~] # echo $?
0 |
法一:实现思路是过滤出MYSQL端口3306进行判断:
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/bash port=` netstat -lnt| grep 3306| wc -l`
if [ $port - ne 1 ]
then /etc/init .d /mysql start
else echo "MySQL is running."
fi 执行结果: [root@localhost ~] # sh mysql1.sh
MySQL is running. |
法二:实现思路是通过MYSQL进程进行判断:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/bin/bash portcess=` ps -ef| grep mysql| grep - v grep | wc -l`
if [ $portcess - ne 2 ]
then /etc/init .d /mysqld start
else echo "MySQL is running."
fi 执行结果: [root@localhost ~] # sh mysql1.sh
MySQL is running. 注意:过滤的字符串‘mysql’不要在脚本名字出现,如果出现则不准 |
法三:实现思路是通过web连接返回值判断:
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/bash mysql -uroot -proot -e "select version();" &> /dev/null
if [ $? - ne 0 ]
then /etc/init .d /mysqld start
else echo "MySQL is running."
fi 执行结果: [root@localhost ~] # sh mysql1.sh
MySQL is running. |
小结:web服务监控手段:
-
端口(本地或者远程)
-
本地进程
-
header(httpd code)
-
URL(wget,curl
本文转自 baishuchao 51CTO博客,原文链接:http://blog.51cto.com/baishuchao/1942148