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

WordPress MySQL 連線異常實時監控:郵件告警 + 日誌記錄雙重保障

     編輯:MySQL 資料庫相關知識

痛點:國外主機 MySQL 不穩定,凌晨宕機無人知曉

DreamHost 等共享主機常發生 MySQL 服務重啟、OOM Killer 殺進程導致網站報 Error establishing a database connection,且多發生於北京時間深夜,發現滯後數小時。

解決方案:植入 wp-db.php 核心錯誤路徑

原理:WordPress 建立連線失敗時會進入 wpdb::__construct() 中的 if (!$this->dbh) 分支,在此注入告警邏輯,零插件、極低開銷。

實施步驟

1. 準備日誌文件

# 站點根目錄
touch log.txt
chmod 666 log.txt

2. 修改 wp-includes/wp-db.php

找到 if ( !$this->dbh ) { (WP 6.x 約第 1600 行),在其 內部 插入:

<?php
// ---- MySQL 連線失敗告警 ----
$from = 'monitor@yourdomain.com';
$to   = 'admin@yourdomain.com';
$subject = '【緊急】WordPress MySQL 連線失敗 - ' . $_SERVER['HTTP_HOST'];
$body = sprintf(
    "Time: %s\nURL: %s\nRemote IP: %s\nUser Agent: %s",
    date('Y-m-d H:i:s'),
    (isset($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],
    $_SERVER['REMOTE_ADDR'],
    $_SERVER['HTTP_USER_AGENT']
);
$headers = "From: $from\r\nReply-To: $from\r\nX-Mailer: PHP/" . PHP_VERSION;
@mail($to, $subject, $body, $headers);

// 寫入本地日誌 (雙重保障)
$log_line = date('Y-m-d H:i:s') . " | " . $_SERVER['REQUEST_URI'] . "\n";
@file_put_contents(ABSPATH . 'log.txt', $log_line, FILE_APPEND | LOCK_EX);
// ---- End ----
?>

3. 驗證生效

  • 臨時修改 wp-config.php 中 DB_HOST 為錯誤地址
  • 訪問首頁 → 收到郵件、log.txt 追加記錄
  • 恢復正確配置

進階強化 (生產環境建議)

  1. 去重節流:用 transient 或 Redis 記錄上次告警時間,同一故障 5 分鐘內僅發一次信。
  2. 多渠道通知:整合 Server酱/企業微信/Slack Webhook,郵件易延遲/進垃圾箱。
  3. 健康檢查端點:新增 /healthz 返回 wpdb::check_connection() 狀態,供 UptimeRobot / Prometheus 抓取。
  4. 日誌切割:logrotate 定期歸檔 log.txt,防止磁碟撐爆。

避坑指南

  • WP 核心更新會覆蓋 wp-db.php,建議將告警代碼封裝為 Must-Use Plugin (wp-content/mu-plugins/db-monitor.php) 掛載 dead_db 鉤子 (WP 3.9+ 支援),實現升級免維護。
  • mail() 依賴服務器 sendmail/postfix,若無 MTA 改用 PHPMailer 直連 SMTP。
  • 共享主機可能禁用 mail(),測試時先在 SSH 執行 echo test | mail -s test admin@domain.com 驗證。

總結

十行代碼、零依賴,將「被動發現」升級為「主動感知」。配合 Must-Use Plugin 固化、多渠道告警、健康檢查端點,構建 WordPress 資料庫層的「心跳監測儀」,讓每一次 MySQL 抖動都逃不過你的眼。

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