美文网首页linux运维运维日常
Shell脚本监控MySQL数据库服务器状态

Shell脚本监控MySQL数据库服务器状态

作者: 大白菜的猪猪 | 来源:发表于2019-11-23 12:00 被阅读0次

编程需求:


目前越来越多的企业基于数据进行相关业务和企业发展方向的战略决策;既然数据库如此重要,那么作为一个合格的运维工程师则需要实时监控数据库的状态,确保其可用性,稳定性及性能;用自动化脚本的方式实现无疑大大减轻了我们的日常工作量!

本脚本作用对象是MySQL数据库!

源代码:


#!/bin/bash

#功能:实现MySQL数据库状态的监控

#定义数据库相关变量

MYSQL_USER=连接数据库的用户名

MYSQL_PASS=连接数据库用户的密码

MYSQL_PORT=3306  mariadb默认端口

MYSQL_HOST=数据库服务器的IP地址

MYSQL_ADMIN="mysqladmin -u$MYSQL_USER -p$MYSQL_PASS -P$MYSQL_PORT -h$MYSQL_HOST"

MYSQL_COMM="mysql -u$MYSQL_USER -p$MYSQL_PASS  -P$MYSQL_PORT -h$MYSQL_HOST -e"

#定义变量:显示信息的颜色属性

#成功绿色

SUCCESS="echo -en \\033[1;32m"

#报错红色

FAILURE="echo -en \\033[1;31m"

#警告黄色

WARNING="echo -en \\033[1;33m"

#正常黑色

NORMAL="echo -en \\033[0;39m"

#检查数据库服务器的状态

$MYSQL_ADMIN ping &> /dev/null

if [ $? -ne 0 ];then

        $FAILURE

        echo "无法连接服务器"

        $NORMAL

        exit

else

        echo -n "数据库状态:"

        $SUCCESS

        echo "[状态正常]"

        $NORMAL

fi

#过滤数据库的启动时间

RUN_TIME=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'uptime'" | awk '/Uptime/{print $2}')

echo -n "数据库已运行时间(秒):"

$SUCCESS#tps为每秒事务量

echo $RUN_TIME

$NORMAL

#过滤数据库列表

DB_LIST=$($MYSQL_COMM "SHOW DATABASES")

DB_COUNT=$($MYSQL_COMM "SHOW DATABASES" | awk 'NR>=2&&/^[^+]/{db_count++} END{print db_count}')

echo -n "该数据库有$DB_COUNT个数据库,分别为:"

$SUCCESS

echo $DB_LIST

$NORMAL

#查询MySQL最大并发连接数

MAX_CON=$($MYSQL_COMM "SHOW VARIABLES LIKE 'max_connections'" | awk '/max/{print $2}')

echo -n "MySQL最大并发连接数:"

$SUCCESS

echo $MAX_CON

$NORMAL

#查看SELECT指令被执行的次数

NUM_SELECT=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_select'" | awk '/Com_select/{print $2}')

echo -n "SELECT被执行的次数:"

$SUCCESS

echo $NUM_SELECT

$NORMAL

#查看UPDATE指令被执行的次数

NUM_UPDATE=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_update'" | awk '/Com_update/{print $2}')

echo -n "UPDATE被执行的次数:"

$SUCCESS

echo $NUM_UPDATE

$NORMAL

#查看DELETE指令被执行的次数

NUM_DELETE=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_delete'" | awk '/Com_delete/{print $2}')

echo -n "DELETE被执行的次数:"

#tps为每秒事务量$SUCCESS

echo $NUM_DELETE

$NORMAL

#查看INSERT指令被查询的次数

NUM_INSERT=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_insert'" | awk '/Com_insert/{print $2}')

echo -n "INSERT被执行的次数:"

$SUCCESS

echo $NUM_INSERT

$NORMAL

#查看COMMIT指令被查询的次数

NUM_COMMIT=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_commit'" | awk '/Com_commit/{print $2}')

echo -n "COMMIT被执行的次数:"

$SUCCESS

echo $NUM_COMMIT

$NORMAL

#查看ROLLBACK指令被查询的次数

NUM_ROLLBACK=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_rollback'" | awk '/Com_rollback/{print $2}')

echo -n "ROLLBACK被执行的次数:"

$SUCCESS

echo $NUM_ROLLBACK

$NORMAL

#查看服务器执行的指令数量

NUM_QUESTION=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'Questions'" | awk '/Questions/{print $2}')

echo -n "Questions服务器执行指令数量:"

$SUCCESS

echo $NUM_QUESTION

$NORMAL

#慢查询数量

NUM_SLOW_QUERY=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'slow_queries'" | awk '/Slow_queries/{print $2}')

echo -n "SLOW Query慢查询数量:"

$SUCCESS

echo $NUM_SLOW_QUERY

$NORMAL

#QPS为每秒查询量

echo -n "数据库QPS:"

$SUCCESS

awk 'BEGIN{print '"$NUM_QUESTION/$RUN_TIME"'}'

$NORMAL

#tps为每秒事务量

echo -n "数据库TPS:"

$SUCCESS

awk 'BEGIN{print '"$NUM_QUESTION+$NUM_ROLLBACK/$RUN_TIME"'}'

$NORMAL


脚本运行结果

重要信息将用...略过


/root/mysql_monitor.sh

数据库状态:[状态正常]

数据库已运行时间(秒):12674

该数据库有7个数据库,分别为:

...

MySQL最大并发连接数:151

SELECT被执行的次数:34

UPDATE被执行的次数:0

DELETE被执行的次数:0

INSERT被执行的次数:0

COMMIT被执行的次数:0

ROLLBACK被执行的次数:0

Questions服务器执行指令数量:124

SLOW Query慢查询数量:0

数据库QPS:0.00978381

数据库TPS:124

相关文章

网友评论

    本文标题:Shell脚本监控MySQL数据库服务器状态

    本文链接:https://www.haomeiwen.com/subject/hzqhwctx.html