数据库状态检查脚本

背景:客户数据库为双主数据库由于疫情原因,监控项目推迟将进行人为巡检MySQL。
脚本中只需修改数据库地址用户密码即可。
注:mysql用户需要具有远程登录的权限
脚本以下功能:
1、 检查数据库是否能正常连接。
2、 检查主从状态。
3、 检查由于达到了mysql的最大连接数导致的失败。
4、 检查由于mysql服务器错误导致连接失败的数量
5、 统计QPS,TPS,mysql提交的事务数量
前4条如果检查失败会将具体信息输出到文件中,脚本会提示文件存放路径。

#!/bin/bash
#date:2020-02-24
#作者 [email protected]
# Description:数据库状态查看
##修改数据库用户密码端口。
user=root
passwd=123456a?
url=10.61.187.40
port=8306
##日志输出路径根据喜好修改即可
output=/home/mysql/check_mysql/log
if [[ -d $output ]]; then
echo file-yes >> /dev/null
else
mkdir -p  $output
fi
#########################################################################################################################
##时间戳
date=$(date +"%Y-%m-%d-%H:%M")
##检查数据连接
Connect=$( mysql -u$user -p$passwd -h$url -P$port -e "select version();" 2>/dev/null )
if [[ $? -eq 0 ]]; then
echo Successful connection
else
echo Database connection failed
echo Check account password  -u$user -p$passwd -h$url -P$port
exit
fi
##下面判断会将错误的信息输入到上面定义的$output目录下面。
##判断数据库主从状态是否正常,如果不正常将输出信息到上面的$output下面。
slave=$(mysql -u$user -p$passwd -h$url -P$port -e  'show slave status\G' 2>/dev/null |grep -E "Slave_IO_Running:|Slave_SQL_Running:"|awk '{print $2}'|grep -c Yes)
if [[ $slave -eq 2 ]]; then
echo mysql-Master slave check passed >/dev/null
else
mysql -u$user -p$passwd -h$url -P$port -e  'show slave status\G' 2>/dev/null |grep -E "Slave_IO_Running|Slave_SQL_Running" >>$output/$date-fail.txt
fi
##由于达到了mysql的最大连接数,进而导致连接失败的数量
errors_max=$(mysql -u$user -p$passwd -h$url -P$port -e  'SHOW GLOBAL STATUS LIKE "Connection_errors_max_connections";' 2>/dev/null |grep Connection_errors_max_connections |awk '{print $2}')
if [[ $errors_max -eq 0 ]]; then
echo errors_max=0 >/dev/null
else
mysql -u$user -p$passwd -h$url -P$port -e  'SHOW GLOBAL STATUS LIKE "Connection_errors_max_connections";' 2>/dev/null |grep Connection_errors_max_connections >>$output/$date-fail.txt
fi
##由于mysql服务器错误导致连接失败的数量
errors_internal=$(mysql -u$user -p$passwd -h$url -P$port -e 'SHOW GLOBAL STATUS LIKE "Connection_errors_internal";' 2>/dev/null |grep Connection_errors_internal |awk '{print $2}')
if [[ $errors_internal -eq 0 ]]; then
echo errors_internal=0 >/dev/null
else
mysql -u$user -p$passwd -h$url -P$port -e 'SHOW GLOBAL STATUS LIKE "Connection_errors_internal";' 2>/dev/null |grep Connection_errors_internal >>$output/$date-fail.txt
fi

##判断当前数据库是否异常
if [[ -f $output/$date-fail.txt ]]; then
echo -e "\033[31m mysql-abnormal \033[0m"
echo -e "\033[31m Check the reason file for database failure \033[0m" 
echo $output
ls $output
echo current time $date
exit
else
echo -e "\033[32m mysql-Healthy \033[0m"
fi
#######下面内容只是统计数据库一些数据。######
##QPS数值
Questions=$(mysql -u$user -p$passwd -h$url -P$port -e "show status like 'Questions';" 2>/dev/null |grep Questions|awk '{print $2}')
uptime=$(mysql -u$user -p$passwd -h$url -P$port -e  "show global status like 'uptime';" 2>/dev/null |grep Uptime |awk '{print $2}')
QPS=`expr $Questions / $uptime`
echo QPS=$QPS
##发往mysql服务器查询的数量,吞吐量,客户端每发送一个查询语句,其值就会加一;
echo Questions=$Questions
##TPS数值
Com_commit=$(mysql -u$user -p$passwd -h$url -P$port -e "SHOW GLOBAL STATUS LIKE 'Com_commit';" 2>/dev/null |grep Com_commit|awk '{print $2}')
Com_rollback=$( mysql -u$user -p$passwd -h$url -P$port -e "SHOW GLOBAL STATUS LIKE 'Com_rollback';" 2>/dev/null|grep Com_rollback|awk '{print $2}')
TPS=`expr $Com_commit / $Com_rollback`
echo TPS=$TPS
##mysql提交的事务数量
echo Com_commit=$Com_commit
##正在打开表的数量
Open_tables=$(mysql -u$user -p$passwd -h$url -P$port -e  "show status like 'Open_tables';"  2>/dev/null |grep 'Open_tables')
echo $Open_tables
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章