您的位置:首页 > 数据库 > SQL

shell学习十四--编写监控mysql脚本

2017-09-19 23:41 453 查看
shell编写监控mysql脚本

判断服务存活方法

1、端口

[root@node01 ~]# netstat -lntup|grep 330

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      127641/mysqld  

2、进程判断

[root@node01 ~]# ps -ef |grep mysqld

root     127539      1  0 17:58 pts/2    00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql

mysql    127641 127539  0 17:58 pts/2    00:00:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock

root     127670 127096  0 17:59 pts/2    00:00:00 grep mysqld

3、登录,看返回值

[root@node01 ~]# mysql -uroot -p1323 -e "select version();"

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

[root@node01 ~]# echo $?

1

[root@node01 ~]# mysql -uroot -p123 -e "select version();" 

+-----------+

| version() |

+-----------+

| 5.1.73    |

+-----------+

[root@node01 ~]# echo $?

0

[root@node01 ~]# 

脚本提示:不要用3306去判断,还要去用整数判断,一旦为空就报错了(比如没起来),可以取字符串(过程太长,过程太复杂)
最好的方式是用wc -l 转行为行数判断

===============================================================

例子1:

[root@node01 day5]# vi mysql_chk.sh                         

#!/bin/bash

port="`netstat -lntup |grep 3306|wc -l`"

if [ $port -eq 1 ];then

   echo "mysql start"

else

   /etc/init.d/mysqld start

fi

例子2:

[root@node01 day5]# vi mysql_chk.sh                         

#!/bin/bash

port="`netstat -lntup |grep 3306|wc -l`"

if [ $port -ne 1 ];then

   /etc/init.d/mysqld start

fi

例子3:

#!/bin/bash

port="`ps -ef |grep mysql|grep -v grep|wc -l`"

if [ $port -ne 2 ];then

   /etc/init.d/mysqld start

fi

[root@node01 day5]# ps -ef |grep mysql|grep -v grep|wc -l 

2

[root@node01 day5]# sh -x mysql_chk4.sh   脚本里不要出现名字

++ wc -l

++ grep -v grep

++ grep mysql

++ ps -ef

+ port=4

+ '[' 4 -ne 2 ']'                         这里有问题 

+ /etc/init.d/mysqld start

Starting mysqld:                                           [  OK  ]

例子4:

[root@node01 day5]# vi mysql_chk1.sh

#!/bin/bash

SERVER="`netstat -lntup | grep 3306`"

if [ -n "$SERVER" ];then

    echo "mysqld is running"

else

   /etc/init.d/mysqld start

fi

例子5:

[root@node01 day5]# vi mysql_chk2.sh           

#!/bin/bash

processcount=`ps -ef|grep mysql|grep -v grep|grep -v mysql_chk2.sh|wc -l`   切记这里脚本带mysql,一定要过滤或者脚本名字不带mysql

port=`netstat -lntup|grep 3306|wc -l`

if [ $processcount -eq 2 ] && [ $port -eq 1 ]

  then

     echo "mysql running"

else

  /etc/init.d/mysqld start

fi

[root@node01 day5]# sh mysql_chk2.sh    

mysql running

[root@node01 day5]# pkill mysqld

[root@node01 day5]# pkill mysqld

[root@node01 day5]# pkill mysqld

[root@node01 day5]# sh mysql_chk2.sh 

Starting mysqld:                                           [  OK  ]

[root@node01 day5]# sh mysql_chk2.sh 

Starting mysqld:                                           [  OK  ]

[root@node01 day5]# sh mysql_chk2.sh 

mysql running

[root@node01 day5]# sh mysql_chk2.sh 

mysql running

[root@node01 day5]# 

例子6:

[root@node01 day5]# vi check_db_client.sh

#!/bin/bash

mysql -uroot -p123 -e "select version();" &>/dev/null

if [ $? -ne 0 ]

  then

   /etc/init.d/mysqld start

else

   echo "mysql is running"

fi

[root@node01 day5]# sh check_db_client.sh

mysql is running

[root@node01 day5]# pkill mysqld

[root@node01 day5]# sh check_db_client.sh

Starting mysqld:                                           [  OK  ]

[root@node01 day5]# pkill mysqld         

[root@node01 day5]# sh check_db_client.sh

^[[AStarting mysqld:                                       [  OK  ]

利用mysql启动原理来写监控脚本

[root@node01 day5]# vi db_chk.sh 

#!/bin/bash

pidfile="/var/run/mysqld/mysqld.pid"

datadir="/var/lib/mysql"

if [ ! -f $pidfile ];then

  /bin/sh /usr/bin/mysqld_safe --datadir=$datadir --pid-file=$pidfile &

  touch /var/run/mysqld

else

  echo "Mysql is running"

fi
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: