首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 服務啟動狀態檢測與自動重啟腳本全攻略

     編輯:MySQL 資料庫相關知識

MySQL 服務的高可用性是生產環境運維的核心指標之一。本文系統整理 Windows 與 Linux 平台下,透過批次檔、Shell 腳本實現 MySQL 進程監控、服務狀態檢測與自動重啟的多種實戰方案,助您構建自我修復的資料庫監控體系。

一、Windows 平台方案

方案 1:任務列表掃描法(通用性最強)

透過 tasklist 配合 find 計算 mysqld.exe 進程數量,若為 0 則觸發 net start mysql 並記錄日誌:

@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
)

優點:不依賴服務名稱,直接檢測進程存活,適用於非標準服務名稱安裝場景。

方案 2:服務控制管理器查詢法

利用 sc query 讀取服務狀態,根據 RUNNING / STOPPED 動態決定啟停邏輯:

@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

適用場景:需精確控制服務狀態切換、或整合至更複雜的批次作業流程中。

二、Linux 平台方案

方案 1:mysqladmin 心跳檢測(官方推薦)

透過 mysqladmin ping 驗證服務回應,異常時發送郵件告警並重啟服務,適合加入 crontab 定時執行:

#!/bin/bash
result=`/usr/bin/mysqladmin ping`
expected='mysqld is alive'
if [[ "$result" != "$expected" ]]; then
    echo "MySQL 偵測異常,嘗試重啟服務"
    SUBJECT="[MYSQL ALERT] Service restart attempted"
    EMAIL="dba@example.com"
    EMAILMESSAGE="/tmp/mysql_alert.txt"
    echo "$result was received" > $EMAILMESSAGE
    echo "Expected: $expected" >> $EMAILMESSAGE
    mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
    sudo systemctl restart mysql
fi

進階技巧:若環境無 mail 指令,可改用 curl 對接企業微信、鉉釘或 Slack Webhook 實現即時通訊告警。

方案 2:網路埠監聽檢測

檢查 3306 埠是否處於 LISTEN 狀態,簡單輕量但無法驗證 SQL 層可用性:

#!/bin/bash
PORT=`netstat -lnt | grep 3306 | wc -l`
if [ $PORT -eq 1 ]; then
    echo "MySQL 監聽正常"
else
    echo "埠未監聽,嘗試啟動服務"
    sudo systemctl start mysql
    # 遞迴檢查防止啟動失敗
    ./check_mysql.sh
fi

三、生產環境部署建議

維度建議配置
執行頻率crontab 每 1-2 分鐘一次,平衡偵測延遲與系統負載
日誌輪轉配合 logrotate 定期清理監控日誌,避免磁碟佔滿
告警去抖引入狀態檔記錄上次告警時間,避免頻繁重啟產生告警風暴
權限最小化建立專用監控帳號,僅授予 SHUTDOWN、PROCESS 權限

掌握跨平台的 MySQL 存活檢測技巧,結合自動化重啟與多渠道告警,即可大幅降低資料庫宕機帶來的業務影響時間,邁向高可用架構的堅實一步。

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