Linux系統Shell編程—企業生產案例(一)
?
? ? ? ? ? ? ? ? ? ? ? ?
企業數據庫可以說是重點保護對象啊,沒有之一,數據在當今企業里就是生命線,因此今天就來說一說,如何通過shell腳本來檢查或監控MYSQL數據庫服務是否正常??
01 ??通過端口判斷
[root@mysql ~]# vi checkmysql.sh
#!/bin/sh
#create by mingongge at 2016-11-11
port=`netstat -lnt|grep 3306|wc -l`
if [ $port -ne 1 ];then
?? echo "mysql is stop"
?? /etc/init.d/mysqld start
else
?? echo "mysql is starting"
fi
[root@mysql ~]# sh checkmysql.sh
mysql is starting
[root@mysql ~]# pkill mysqld
[root@mysql ~]# lsof -i :3306
[root@mysql ~]# sh checkmysql.sh
mysql is stop
Starting MySQL.??????????????????? ?????????????[? OK? ]
[root@mysql ~]# lsof -i :3306??
COMMAND? PID? USER?? FD?? TYPE DEVICE SIZE/OFF NODE NAME
mysqld? 1601 mysql?? 10u? IPv4? 13690????? 0t0? TCP *:mysql (LISTEN)
02 ?通過進程與端口判斷
[root@mysql ~]# ps -ef|grep mysql|grep -v grep|wc -l
2
[root@mysql ~]# vi checkmysql.sh
#!/bin/sh
#create by mingongge at 2016-11-11
if [[ $port -eq 1 || $porcess -eq 2 ]];then
???? echo "mysql is starting"
else
???? echo "mysql is stop"
?? ??/etc/init.d/mysqld start
注:利用進程判斷時,腳本的名稱就不要包含有Mysql的字樣了,否則就會產生判斷不準確的情況出現
03 ?登陸數據庫根據返回值判斷
[root@mysql ~]# vi accessmysql.sh
#/bin/sh
mysql -uroot -pmysql123 -e "show databases;" >/dev/null 2>&1
注:此處千萬不要用直接登陸的寫法mysql -uroot -pmysql123,否則會直接登陸了,不然執行下面的過程了
if [ $? -eq 0 ];then
???? echo "mysql is starting"
else
???? echo "mysql is stop"
???? /etc/init.d/mysqld start
fi
[root@mysql ~]# sh accessmysql.sh
mysql is starting
[root@mysql ~]# pkill mysqld
[root@mysql ~]# sh accessmysql.sh
mysql is stop
Starting MySQL.??????????????????? [? OK? ]
[root@mysql ~]# sh accessmysql.sh
mysql is starting
監控MYSQL數據庫是否異常的多種方法:
1、根據端口監控本地數據庫
2、根據進程進行監控本地數據庫
3、通過客戶端命令及賬號連接MYSQL,然后根據返回內容進行判斷是否正常
4、通過PHP、JAVA程序URL方式進行監控(此種方式最佳,生產環境常用)
5、也可以通過以上方法綜合利用
?