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
判断服务存活方法
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
相关文章推荐
- shell学习二十三--case语句编写mysql启动脚本
- CentOS下编写shell脚本来监控MySQL主从复制的教程
- CentOS下编写shell脚本来监控MySQL主从复制的教程_MySQL
- CentOS下编写shell脚本来监控MySQL主从复制的教程
- CentOS下编写shell脚本来监控MySQL主从复制
- shell学习二十一--使用if编写mysql启动脚本
- CentOS下编写shell脚本来监控MySQL主从复制的教程
- NO3.Shell脚本学习——编写Shell脚本
- 学习shell的时候 第一个脚本就是ping监控 python版
- 自动监控主从MySQL同步的SHELL脚本
- shell监控MySQL主从状态脚本制作及解析
- 学习 shell —— 编写基本脚本
- 实战模拟监控MySQL服务shell脚本小结
- 实战模拟监控MySQL服务shell脚本小结
- Shell 学习(一、编写shell脚本和执行)
- 自动监控主从MySQL同步的SHELL脚本 推荐
- shell脚本监控mysql主从同步状态并自动修复
- shell脚本监控MySQL服务是否正常
- nagios环境搭建与监控mysql,脚本编写
- 学习编写shell脚本(一)