MySQL 正式版經過多平台測試,崩潰多源於特定環境、硬體或操作失誤。關鍵在於精確重現問題,才能快速定位並修復。本文提供系統化排查流程。
mysqladmin version 查看服務運行時長,判斷是否為 mysqld 重啟。resolve_stack_dump 解析(注意變數值不一定 100% 準確)。正常情況下,write() 系統呼叫確保 SQL 執行後資料落盤,OS 保證未刷新資料寫入磁碟。啟動 --flush 可強制每條 SQL 後刷盤。損壞通常源於:
mysqld 本身缺陷導致中途終止。--skip-external-locking)。mysqld 混亂。ALTER TABLE 更換引擎驗證)。mysqladmin shutdown → myisamchk --silent --force */*.MYI → 重啟,確保乾淨狀態啟動。--log,約 95% 缺陷與特定查詢相關,重啟前日誌最後幾條查詢多為兇手。若能用特定查詢重現崩潰(即使表已檢查),即可提交缺陷報告。mysql-test 目錄與 sql-bench 基準測試,可模擬應用負載。fork_big.pl(源碼 tests 目錄)。--with-debug 或 --with-debug=full,獲得安全記憶體分配器與詳細輸出。--skip-external-locking:某些系統 lockd 失效,此選項關閉外部鎖定(注意:不可同目錄雙實例,myisamchk 需謹慎)。mysqladmin -u root processlist,即使服務假死,通常仍能連線,可見連線數與鎖定狀態。mysqladmin -i 5 status 或 mysqladmin -i 5 -r status。mysqld,運行測試腳本。backtrace → info local → up → info local → up → info localinfo threads 查看所有執行緒,切換特定執行緒分析。VARCHAR 動態行易損壞,可嘗試 ALTER TABLE ... CHAR 轉固定長度行測試(佔空間稍大但容錯性強)。