數據庫狀態檢查腳本

背景:客戶數據庫爲雙主數據庫由於疫情原因,監控項目推遲將進行人爲巡檢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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章