首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

檢查 MySQL 服務啟動狀態的跨平台腳本方案

     編輯:MySQL 綜合教學

Windows 與 Linux 下 MySQL 服務監控腳本完整指南

確保 MySQL 服務持續運行是資料庫運維的基礎工作。本文提供 Windows 批次檔與 Linux Shell 腳本兩套方案,涵蓋進程檢測、服務狀態查詢、自動重啟等核心功能,並支援加入排程實現無人值守監控。

Windows 環境下的兩種監控策略

策略一:任務列表掃描法

透過 tasklist 搭配 find 計數 mysqld.exe 進程數量,若為 0 則嘗試重啟服務並記錄日誌。

@echo off
for /f "usebackq" %%i in (`tasklist ^| find /c "mysqld.exe"`) do (
    set chkstat=%%i
)
if %chkstat% == 0 (
    net start mysql
    echo ================ >> %date:~0,10%.log
    echo %date% %time% check mysql service stop >> %date:~0,10%.log
    echo restart mysql service! >> %date:~0,10%.log
    echo ================ >> %date:~0,10%.log
)

適用場景:簡單部署、無服務管理器依賴、需自訂日誌格式。

策略二:服務控制管理器查詢法

使用 sc query 直接讀取服務狀態,支援更精細的啟停邏輯控制。

@echo off
for /f "skip=3 tokens=4" %%i in ('sc query mysql') do set "zt=%%i" & goto :next
:next
if /i "%zt%"=="RUNNING" (
    echo 已發現服務正在運行,執行關閉操作
    net stop mysql
) else (
    echo 服務處於停止狀態,執行啟動操作
    net start mysql
)
exit /b
pause

優勢:官方服務 API,狀態判斷更可靠;支援自訂啟停邏輯(如優雅關閉)。

Linux 環境下的 Shell 監控方案

方案一:mysqladmin ping 健康檢查

官方推薦方式,直接檢測 MySQL 回應能力,支援郵件告警與自動重啟。

#!/bin/bash
result=`/usr/bin/mysqladmin ping`
expected='mysqld is alive'
if [[ "$result" != "$expected" ]]; then
    echo "It's dead - restart mysql"
    SUBJECT="[MYSQL ERROR] - Attempting to restart service"
    EMAIL="admin@example.com"
    EMAILMESSAGE="/tmp/emailmessage.txt"
    echo "$result was received" > $EMAILMESSAGE
    echo "when we were expected $expected" >> $EMAILMESSAGE
    mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
    sudo /etc/init.d/mysql restart
fi

部署建議:加入 crontab 定時執行(如每分鐘 * * * * * /path/check_mysql.sh)。

方案二:網路埠監聽檢測

透過 netstat 檢查 3306 埠監聽狀態,適合無法使用 mysqladmin 的環境。

#!/bin/bash
PORT="0"
PORT=`netstat -lnt | grep 3306 | wc -l`
echo $PORT
if [ $PORT -eq 1 ]; then
    echo "mysql is running"
else
    echo "mysql is not running"
    echo "program ready to start mysql"
    sudo service mysql start
    ./check_mysql.sh
fi

注意:僅檢測埠監聽,無法識別 MySQL 內部錯誤(如資料損壞導致拒絕連線)。

進階運維建議

  • 分層監控:結合進程、埠、SQL 回應三層檢測(SELECT 1)
  • 狀態持久化:將檢測結果寫入時間序列資料庫(如 Prometheus)供圖表化分析
  • 故障自癒:整合 Ansible/SaltStack 實現跨主機協同恢復
  • 告警去重:實施抑制邏輯避免風暴告警(如連續 3 次失敗才通知)

總結

Windows 推薦 sc query 方案,Linux 首選 mysqladmin ping。生產環境建議部署雙重檢測機制,並納入統一監控平台(Zabbix/Prometheus/Grafana)實現可視化運維。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved