1. 程式人生 > >腳本分享-MYSQL服務+主從+告警通知監控

腳本分享-MYSQL服務+主從+告警通知監控

通過 path tmp 告警 守護 查看 roo 日誌記錄 mysql數據庫

1、配置MYSQL本地免密登錄

賬號密碼會信息會記錄到用戶家目錄下的".mylogin.cnf"文件中,若你想重新輸入密碼登錄的話則刪除此文件即可。

[root@localhost ~]# mysql_config_editor set --user=root --host=localhost --port=3306 --password
Enter password: 

2、配置郵件轉發

我們需要安裝郵件客戶端軟件"Mailx",然後配置公司公共郵箱用於郵件發送。

[root@localhost ~]# yum -y install mailx
[root@localhost ~]# vi /etc/mail.rc
在文件尾部追加內容
set [email protected]
set smtp=smtp.126.com
set smtp-auth=login
set [email protected]
set smtp-auth-password=xxxxx
[root@localhost ~]# echo ‘hello world!‘ | mail -s ‘你好‘ [email protected] 

3、編寫腳本

編寫思路:

  • 檢測MYSQL服務是否運行,若運行則檢測MYSQL主從復制狀態,若未運行則郵件告警通知管理員處理,並記錄日誌
  • 檢測MYSQL主從復制狀態,若異常則告警通知管理員處理,並記錄日誌
  • 腳本采用死循環方式運行,每10秒運行一次
  • 為了防止在循環過程中出現的反復郵件告警通知和日誌記錄,我采用臨時文件的方式,通過IF判斷過濾其重復寫入日誌和郵件發送,當狀態發生切換時才會記錄日誌和發送郵件

腳本內容如下:

while :
do
#配置部分
[email protected]
#設置管理員郵箱,多個郵箱以空格間隔
LOG_PATH=/var/log/mysqlmonitor.log
#設置日誌文件路徑
MYSQL_PORT=3306
#設置MYSQL數據庫端口
IP_DEVICE=ens160
#設置主機網卡設備名

HOST_IPADDR=`ifconfig $IP_DEVICE |awk ‘NR==2{print $2}‘`
LOCAL_DATE=`date +%Y-%m-%d\ \%H:%M:%S`

TMP_FILE_PROCESS=/tmp/mysqlprocess.tmp
TMP_FILE_MASTER_AND_SLAVE=/tmp/mysqlms.tmp

if [ ! -e $TMP_FILE_PROCESS ] || [ ! -e TMP_FILE_MASTER_AND_SLAVE ]
then
touch $TMP_FILE_PROCESS
touch $TMP_FILE_MASTER_AND_SLAVE
fi

MYSQLMONITOR_TMP_ONE=`cat $TMP_FILE_PROCESS |grep ‘MYSQL服務運行正常!‘|wc -l`
MYSQLMONITOR_TMP_TWO=`cat $TMP_FILE_PROCESS |grep ‘MYSQL服務未運行!‘|wc -l`
MYSQLMONITOR_TMP_THREE=`cat $TMP_FILE_MASTER_AND_SLAVE |grep ‘MYSQL主從復制工作異常!‘|wc -l`
MYSQLMONITOR_TMP_FOUR=`cat $TMP_FILE_MASTER_AND_SLAVE |grep ‘MYSQL主從復制工作正常!‘|wc -l`

MYSQL_ACTIVE=`netstat -lnupt |grep $MYSQL_PORT|wc -l`

if [ $MYSQL_ACTIVE != 0 ]
then
        if [ $MYSQLMONITOR_TMP_ONE = 0 ]
        then
        echo "$LOCAL_DATE $HOST_IPADDR MYSQL服務運行正常!">>$LOG_PATH
        echo ‘MYSQL服務運行正常!‘>$TMP_FILE_PROCESS
                for i in $ADMIN_MAILS
                do
                echo -e "MYSQL服務已恢復正常運行!信息如下: \n發生時間:$LOCAL_DATE \n發生主機:$HOST_IPADDR" |mail -s "主機:$HOST_IPADDR MYSQL服務已恢復正常運行" $i
                done
        fi

Slave_IO_Running=`mysql -e "show slave status\G;" |grep "Slave_IO_Running:"|awk -F ‘:‘ ‘{print $2}‘`
Slave_SQL_Running=`mysql -e "show slave status\G;" |grep "Slave_SQL_Running:"|awk -F ‘:‘ ‘{print $2}‘`
Slave_SQL_Running_State=`mysql -e "show slave status\G;" |grep "Slave_SQL_Running_State:"|awk -F ‘:‘ ‘{print $2}‘`

        if [ $Slave_IO_Running = No ] || [ $Slave_SQL_Running = No ]
        then
                if [ $MYSQLMONITOR_TMP_THREE = 0 ]
                then
                echo "$LOCAL_DATE $HOST_IPADDR MYSQL主從復制異常!">>$LOG_PATH
                echo ‘MYSQL主從復制工作異常!‘>$TMP_FILE_MASTER_AND_SLAVE
                        for i in $ADMIN_MAILS
                        do
                        echo -e "MYSQL主從復制工作異常!請及時處理!信息如下:\nIO線程:$Slave_IO_Running \nSQL線程:$Slave_SQL_Running \n錯誤信息:$Slave_SQL_Running_State \n發生時間:$LOCAL_DATE \n發生主機:$HOST_IPADDR" |mail -s "主機:$HOST_IPADDR MYSQL主從復制工作異常" $i
                        done
                fi
        else
                if [ $MYSQLMONITOR_TMP_FOUR = 0 ]
                then
                echo "$LOCAL_DATE $HOST_IPADDR MYSQL主從復制正常!">>$LOG_PATH
                echo ‘MYSQL主從復制工作正常!‘>$TMP_FILE_MASTER_AND_SLAVE
                        for i in $ADMIN_MAILS
                        do
                        echo -e "MYSQL主從復制工作已恢復正常!信息如下:\nIO線程:$Slave_IO_Running \nSQL線程:$Slave_SQL_Running \n發生時間:$LOCAL_DATE \n發生主機:$HOST_IPADDR" |mail -s "主機:$HOST_IPADDR MYSQL主從復制工
作已恢復正常" $i
                        done
                fi
        fi
else
        if [ $MYSQLMONITOR_TMP_TWO = 0 ]
        then
        echo "$LOCAL_DATE $HOST_IPADDR MYSQL服務未運行!">>$LOG_PATH
        echo ‘MYSQL服務未運行!‘>$TMP_FILE_PROCESS

                for i in $ADMIN_MAILS
                do
                echo -e "MYSQL服務未運行!請及時處理!信息如下: \n發生時間:$LOCAL_DATE \n發生主機:$HOST_IPADDR" |mail -s "主機:$HOST_IPADDR MYSQL服務未運行" $i
                done
        fi
fi
sleep 10;
done

4、運行腳本

作為守護進程運行。
[root@localhost ~]# nohup sh mysqlmonitor.sh >/dev/null &

5、測試腳本

  • 運行腳本
  • 測試MYSQL服務是否正常運行,手動關閉啟動服務,是否查收到了郵件通知
  • 測試MYSQL主從復制狀態,手動關閉啟動MYSQL主從,查看是否查收到了郵件通知

腳本分享-MYSQL服務+主從+告警通知監控