实战模拟监控MySQL服务shell脚本小结
2012-12-14 12:19
691 查看
缘起:老男孩shell培训课上带领学生练习shell开发if语句时的几个小例子和大家分享。
#!/bin/sh
#created by oldboy
#mail:oldboy521@gmail.com
PortNum=`netstat -lnt|grep 3306|wc -l`
if [ $PortNum -eq 1 ]
then
echo "mysqld is running."
else
echo "mysqld is stoped."
fi
#!/bin/sh
#created by oldboy
#mail:oldboy521@gmail.com
PortNum=`netstat -lnt|grep 3306|wc -l`
#PortNum=`nmap 10.0.0.189 -p 3306|grep open|wc -l`
[ $PortNum -eq 1 ] && echo "mysqld is running."||echo "mysqld is stoped."
#!/bin/sh
#created by oldboy
#mail:oldboy521@gmail.com
#load functions
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
PortNum=`netstat -lnt|grep 3306|wc -l`
if [ $PortNum -eq 1 ]
then
action "mysqld is running." /bin/true
else
action "mysqld is stoped." /bin/false
fi
#!/bin/sh
#created by oldboy
#mail:oldboy521@gmail.com
PortNum=`netstat -lnt|grep 3306|wc -l`
ProcessNum=`ps -ef|grep mysql|grep -v grep| wc -l`
#echo $PortNum $ProcessNum
#exit 1
if [ $PortNum -eq 1 -a $ProcessNum -eq 2 ]
then
echo "mysqld is running."
else
echo "mysqld is stoped."
fi
提示:如果不放心还可以同时加上模拟用户访问。
技巧:脚本调试技巧
1)grep过滤的字符串,不要包含在文件名里,例:grep mysql ,文件名为check_mysql.sh 就不太好。比较好的文件名如:
-rw-r--r-- 1 root root 236 Sep 9 22:19 check_db01.sh
-rw-r--r-- 1 root root 293 Sep 9 22:34 check_db02.sh
-rw-r--r-- 1 root root 212 Sep 9 22:49 check_db03.sh
2)当语法没有问题但是结果不正确,可以使用下面的方法排查:
a)在变量定义的后面打印变量结果,看和实际结果是否一致,如:
echo $PortNum $ProcessNum
exit 1
b) sh -x check_db02.sh的方式,跟踪脚本执行过程,更多的调试方案见后面的SHELL脚本调试精讲。
3)判断远端mysql服务是否正常的方法
#!/bin/sh
#created by oldboy
#mail:oldboy521@gmail.com
PortNum=`nmap 10.0.0.189 -p 80|grep open|wc -l`
if [ $PortNum -eq 1 ]
then
echo "mysqld is running."
else
echo "mysqld is stoped."
fi
提示:端口的使用方法还有很多种,包括不限于下面地址的3种方法,/article/4225399.html
例如:还可以用nagios的check_tcp插件等法。
#!/bin/sh
#created by oldboy
#mail:oldboy521@gmail.com
mysql -S /data/3306/mysql.sock -e "select version();" >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo "mysqld is running."
else
echo "mysqld is stoped."
fi
技巧:
1)使用web 连接账号模拟访问。
/*
#this scripts is created by oldboy
#oldboy QQ:31333741
#site:http://www.etiantian.org
#blog:http://oldboy.blog.51cto.com
#oldboy trainning QQ group: 208160987 226199307 44246017
*/
$link_id=mysql_connect('10.0.0.4','oldboy','oldboy123') or mysql_error();
if($link_id){
echo "mysql successful by oldboy !";
}else{
echo mysql_error();
}
?>
以上的方法仅仅是简单的判断,那么下面给出一个集判断,处理,及报警于一身的较专业的mysql检查处理脚本。
4)较专业mysql检查处理脚本的解决方案
更多的精彩,下次和大家再分享。
本文出自 “老男孩的linux博客” 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/986905
1)端口判断法==>仅适合数据库本地使用
法1:if条件判断方法
[root@oldboy scripts]# cat check_db01.sh#!/bin/sh
#created by oldboy
#mail:oldboy521@gmail.com
PortNum=`netstat -lnt|grep 3306|wc -l`
if [ $PortNum -eq 1 ]
then
echo "mysqld is running."
else
echo "mysqld is stoped."
fi
法2:条件表达式用法
[root@oldboy scripts]# cat check_db01_1.sh#!/bin/sh
#created by oldboy
#mail:oldboy521@gmail.com
PortNum=`netstat -lnt|grep 3306|wc -l`
#PortNum=`nmap 10.0.0.189 -p 3306|grep open|wc -l`
[ $PortNum -eq 1 ] && echo "mysqld is running."||echo "mysqld is stoped."
法3:使用系统函数显示法
[root@oldboy scripts]# cat check_db01_2.sh#!/bin/sh
#created by oldboy
#mail:oldboy521@gmail.com
#load functions
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
PortNum=`netstat -lnt|grep 3306|wc -l`
if [ $PortNum -eq 1 ]
then
action "mysqld is running." /bin/true
else
action "mysqld is stoped." /bin/false
fi
2)进程加端口判断法==>仅适合数据库本地使用
[root@oldboy scripts]# cat check_db02.sh#!/bin/sh
#created by oldboy
#mail:oldboy521@gmail.com
PortNum=`netstat -lnt|grep 3306|wc -l`
ProcessNum=`ps -ef|grep mysql|grep -v grep| wc -l`
#echo $PortNum $ProcessNum
#exit 1
if [ $PortNum -eq 1 -a $ProcessNum -eq 2 ]
then
echo "mysqld is running."
else
echo "mysqld is stoped."
fi
提示:如果不放心还可以同时加上模拟用户访问。
技巧:脚本调试技巧
1)grep过滤的字符串,不要包含在文件名里,例:grep mysql ,文件名为check_mysql.sh 就不太好。比较好的文件名如:
-rw-r--r-- 1 root root 236 Sep 9 22:19 check_db01.sh
-rw-r--r-- 1 root root 293 Sep 9 22:34 check_db02.sh
-rw-r--r-- 1 root root 212 Sep 9 22:49 check_db03.sh
2)当语法没有问题但是结果不正确,可以使用下面的方法排查:
a)在变量定义的后面打印变量结果,看和实际结果是否一致,如:
echo $PortNum $ProcessNum
exit 1
b) sh -x check_db02.sh的方式,跟踪脚本执行过程,更多的调试方案见后面的SHELL脚本调试精讲。
3)判断远端mysql服务是否正常的方法
法1:端口检查法==>适合在远端服务器使用(本地也适合)
[root@oldboy scripts]# cat check_db03.sh#!/bin/sh
#created by oldboy
#mail:oldboy521@gmail.com
PortNum=`nmap 10.0.0.189 -p 80|grep open|wc -l`
if [ $PortNum -eq 1 ]
then
echo "mysqld is running."
else
echo "mysqld is stoped."
fi
提示:端口的使用方法还有很多种,包括不限于下面地址的3种方法,/article/4225399.html
例如:还可以用nagios的check_tcp插件等法。
法2:模拟用户(包括web server)访问方法==>适合在远端服务器使用(本地也适合)
[root@oldboy scripts]# cat check_db04.sh#!/bin/sh
#created by oldboy
#mail:oldboy521@gmail.com
mysql -S /data/3306/mysql.sock -e "select version();" >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo "mysqld is running."
else
echo "mysqld is stoped."
fi
技巧:
1)使用web 连接账号模拟访问。
法3:模拟用户使用程序URL的方式判断
<?php/*
#this scripts is created by oldboy
#oldboy QQ:31333741
#site:http://www.etiantian.org
#blog:http://oldboy.blog.51cto.com
#oldboy trainning QQ group: 208160987 226199307 44246017
*/
$link_id=mysql_connect('10.0.0.4','oldboy','oldboy123') or mysql_error();
if($link_id){
echo "mysql successful by oldboy !";
}else{
echo mysql_error();
}
?>
以上的方法仅仅是简单的判断,那么下面给出一个集判断,处理,及报警于一身的较专业的mysql检查处理脚本。
4)较专业mysql检查处理脚本的解决方案
#!/bin/bash #created by oldboy QQ 49000448 #date:20100918 MYUSER=root MYPASS="oldboy" MYSOCK=/data/3306/mysql.sock MySQL_STARTUP="/data/3306/mysql" LOG_PATH=/tmp LOG_FILE=${LOG_PATH}/mysqllogs_`date +%F`.log MYSQL_PATH=/usr/local/mysql/bin MYSQL_CMD="$MYSQL_PATH/mysql -u$MYUSER -p$MYPASS -S $MYSOCK" #→全变量定义方式,显得更专业。 $MYSQL_CMD -e "select version();" >/dev/null 2>&1 if [ $? -eq 0 ] then echo "MySQL is running! " exit 0 else $MySQL_STARTUP start >$LOG_FILE#→日志也是变量。 sleep 5; $MYSQL_CMD -e "select version();" >/dev/null 2>&1 if [ $? -ne 0 ] then for num in `seq 10`#→通过for循环来杀死mysqld,真正杀死则退出循环或每隔个两秒杀一次,一共杀10次。 do killall mysqld>/dev/null 2>&1 [ $? -ne 0 ] && break; sleep 2 done $MySQL_STARTUP start >>$LOG_FILE fi $MYSQL_CMD -e "select version();" >/dev/null 2>&1 && Status="restarted" || Status="unknown"#→这个逻辑更准确。 echo "MySQL status is $Status" >>$LOG_FILE mail -s "MySQL status is $Status" 31333741@qq.com < $LOG_FILE #→把上面的Status作为结果标题传给邮件,当然你可以做短信,语音通话报警。 fi exit
更多的精彩,下次和大家再分享。
本文出自 “老男孩的linux博客” 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/986905
相关文章推荐
- 实战模拟监控MySQL服务shell脚本小结
- 实战模拟监控MySQL服务shell脚本小结
- 实战模拟监控MySQL服务shell脚本小结
- 实战模拟监控MySQL服务shell脚本小结
- shell脚本:监控MySQL服务是否正常
- shell脚本监控MySQL服务是否正常
- shell脚本:监控MySQL服务是否正常
- 4000 一个简单的监控mysql服务的shell脚本
- shell脚本:监控MySQL服务是否正常
- shell监控脚本实例―监控mysql主从复制
- 自动监控主从MySQL同步的SHELL脚本
- Linux下MySQL主从同步监控shell脚本
- 写了一个简单的shell脚本监控mysql服务器运行状态
- CentOS下编写shell脚本来监控MySQL主从复制的教程
- linux实战(二)----shell脚本监控实例-----日志截取三个命令在性能监控等运用中的实例解析
- 监控php-fpm并自动重启服务的shell脚本
- PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)
- SHELL脚本实现服务宕机监控自动重启
- Zabbix+Shell脚本监控线上服务
- Shell脚本实现监控MySQL主从同步