实战模拟监控mysql服务shell脚本小结_实战模拟监控MySQL服务shell脚本小结
发布日期:2021-10-26 17:40:24 浏览次数:5 分类:技术文章

本文共 3720 字,大约阅读时间需要 12 分钟。

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种方法,http://oldboy.blog.51cto.com/2561410/942530

例如:还可以用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 

#→把上面的Status作为结果标题传给邮件,当然你可以做短信,语音通话报警。

fi

exit

转载地址:https://blog.csdn.net/weixin_33952775/article/details/113441348 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python变量类型是集合_Python基础变量类型——List浅析
下一篇:mysql like 时间_mysql的日期和时间函数

发表评论

最新留言

很好
[***.229.124.182]2024年04月13日 12时19分06秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

AndroidStudio安卓原生开发_UI高级_StateListDrawable状态选择器_按钮按下和抬起显示不同颜色---Android原生开发工作笔记124 2019-04-26
AndroidStudio_你的主机中的软件中止了一个已建立的连接---Android原生开发工作笔记123 2019-04-26
AndroidStudio安卓原生开发_UI高级_自定义主题和样式---Android原生开发工作笔记129 2019-04-26
AndroidStudio安卓原生开发_Activity和AppCompatActivity的区别认识---Android原生开发工作笔记127 2019-04-26
AndroidStudio安卓原生开发_Android扫描附近指定的蓝牙设备_通过设备名称过滤_计算距离_离扫描设备近的显示的时候放在前面---Android原生开发工作笔记128 2019-04-26
网站制作---网站伪静态的介绍 2019-04-26
微信公众开放平台开发01---微信公众平台介绍,以及开发准备 2019-04-26
Win10 环境下安装压缩包版本 MySQL-8.0.13 2019-04-26
Anaconda 简单使用手册 2019-04-26
Jupyter Notebook 使用笔记 2019-04-26
Python 实现 PTA 平台 基础编程题目集 2019-04-26
爬取网易科技滚动新闻 2019-04-26
Python 去除文本文件中的空行 2019-04-26
Python 读取 Excel 中符合特定条件的数据,并写入新的表格 2019-04-26
多层感知机 2019-04-26
Python实现文本分词并写入新的文本文件,然后提取出文本中的关键词 2019-04-26
解决AS3.x无法新建Module:Project needs to be converted to androidx.* dependencies 2019-04-26
WebView完整配置及正确使用,抠门式的内存管控 2019-04-26
解决Android Studio gradle_jcenter()下载慢,使用maven阿里源 2019-04-26
解决AS xml代码提示失效、自动补全代码功能失效、创建项目xml文件Error前言中不允许有内容 2019-04-26