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

Shell 腳本監控 MySQL 存活狀態:nmap 檢測埠口 + 連線驗證 + 自動重啟

     編輯:MySQL 資料庫相關知識

腳本邏輯流程

  1. 用 nmap localhost | grep 3306 檢測 3306 埠是否開放。
  2. 若埠不存在 → 直接啟動 mysqld_safe。
  3. 若埠存在 → 執行 mysql -u user -p --connect_timeout=5 -e "SHOW DATABASES;" 驗證真實可用性。
  4. 連線失敗 → kill -9 所有 MySQL 進程 → 重啟 mysqld_safe。
  5. 連線成功 → 無操作。

完整腳本

#!/bin/bash
# 依賴 nmap,請先安裝:yum install nmap / apt-get install nmap

MYSQL_USER=xxxxxx
MYSQL_PASS=xxxxxx
MYSQL_BIN=/usr/local/mysql/bin/mysql
MYSQLD_SAFE=/usr/local/mysql/bin/mysqld_safe

# 1. 檢測埠口
/usr/bin/nmap localhost | grep -q 3306
if [ $? -eq 0 ]; then
    # 2. 埠口存在,驗證連線
    $MYSQL_BIN -u$MYSQL_USER -p$MYSQL_PASS --connect_timeout=5 -e "SHOW DATABASES;" >/dev/null 2>&1
    if [ $? -ne 0 ]; then
        # 3. 連線失敗,強制殺進程重啟
        ps aux | grep mysql | grep -v grep | awk '{print $2}' | xargs kill -9 2>/dev/null
        $MYSQLD_SAFE --user=mysql & >/dev/null
    fi
else
    # 4. 埠口不存在,直接啟動
    $MYSQLD_SAFE --user=mysql & >/dev/null
fi

部署建議

  • 放入 /usr/local/bin/mysql_monitor.sh,chmod +x。
  • crontab -e 每分鐘檢查:
    * * * * * /usr/local/bin/mysql_monitor.sh
  • 日誌導向檔案便於事後分析:
    * * * * * /usr/local/bin/mysql_monitor.sh >> /var/log/mysql_monitor.log 2>&1

優化與注意事項

問題改進
nmap 掃描較慢、權限需求高改用 netstat -tln | grep :3306 或 ss -tln | grep :3306 (無需 root、毫秒級)
密碼明文寫在腳本用 .my.cnf [client] 區段存密碼,腳本不帶 -p 參數
kill -9 可能導致 InnoDB 恢復時間變長先嘗試 mysqladmin shutdown,失敗再 kill -TERM,最後才 kill -9
單機單實例假設多實例需指定 --socket、--port 區分
無告警通知整合 mail、curl 推送至企業微信/鉚釘/Telegram

生產級替代方案

  • systemd:Restart=on-failure、RestartSec=5 內建守護。
  • MHA / Orchestrator:主從故障自動切換、健康檢查。
  • Prometheus + mysqld_exporter + Alertmanager:指標級監控、多維度告警。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved