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

MySQL 錯誤日誌位置查找與查看完整指南

     編輯:MySQL 資料庫相關知識

MySQL 運行異常時,錯誤日誌是首要診斷依據。但日誌路徑因安裝方式 (官方安裝包、Yum/Apt、Docker、源碼編譯)、作業系統、配置參數而異。本文提供通用查找方法與查看技巧。

一、標準路徑對照表

安裝方式 / OS預設錯誤日誌路徑檔案命名
Windows (MSI/Zip)C:\ProgramData\MySQL\MySQL Server X.Y\Data\主機名.err
Linux (Yum/RPM - Oracle/Percona)/var/log/mysqld.log 或 /var/log/mysql/error.logmysqld.log / error.log
Linux (Apt/Debian/Ubuntu)/var/log/mysql/error.logerror.log
Linux (源碼編譯 / 自定義)datadir 目錄下主機名.err
Docker (官方映像)標準輸出 (stdout/stderr)docker logs container_name
MariaDB/var/log/mysql/mariadb.log 或 datadir同 MySQL

二、通用查找方法 (適用所有環境)

方法 1:SHOW VARIABLES 直接查詢 (最準確)

mysql -u root -p -e "SHOW VARIABLES LIKE 'log_error';"
-- 輸出範例:/var/log/mysql/error.log 或 /var/lib/mysql/host.err

方法 2:查看配置檔 log_error 參數

grep -i log_error /etc/my.cnf /etc/mysql/my.cnf /usr/my.cnf ~/.my.cnf 2>/dev/null
# 若未設定,則使用預設路徑 (datadir/主機名.err)

方法 3:從進程啟動參數推斷

ps aux | grep mysqld
# 觀察 --log-error=... 參數;若無,則用 --datadir 定位

方法 4:find 系統搜尋 (最後手段)

# 以主機名搜尋
HOST=$(hostname)
find / -name "${HOST}.err" -o -name "mysqld.log" -o -name "error.log" 2>/dev/null | head -20

# 或搜尋近期修改的 mysql 相關日誌
find /var/log /var/lib/mysql /usr/local/mysql -name "*.log" -o -name "*.err" -mtime -7 2>/dev/null

三、查看與分析技巧

# 即時追蹤 (最常用)
tail -f /var/log/mysql/error.log

# 最近 100 行
tail -100 /var/log/mysql/error.log

# 關鍵字搜尋 (不區分大小寫)
grep -i "error\|fail\|crash\|assertion\|corrupt\|innodb" /var/log/mysql/error.log

# 特定時間範圍 (配合 journald/systemd)
journalctl -u mysqld --since "1 hour ago" | grep -i error

# Docker 環境
docker logs mysql_container --since 1h 2>&1 | grep -i error

四、關鍵錯誤代碼速查

代碼/關鍵字典型原因對策方向
Can't create test file資料目錄權限/路徑錯誤檢查 datadir 權限、SELinux/AppArmor
InnoDB: Unable to lock ./ibdata1另一實例在跑 / 殘留鎖檔kill 殘留進程、刪除 ibdata1 同目錄 .lock
[ERROR] Plugin 'InnoDB' registration failedib_logfile 大小不符 / 損壞停止服務、刪除 ib_logfile*、重啟 (自動重建)
Table './db/tbl' is marked as crashedMyISAM 表損壞REPAIR TABLE tbl; 或 myisamchk -r
Access denied for user帳號/密碼/Host 不匹配檢查 mysql.user、FLUSH PRIVILEGES
Too many connections連線數超過 max_connections調大參數、檢查連線池洩漏、KILL 閒置連線

五、日誌輪轉與保留建議

# logrotate 設定 (/etc/logrotate.d/mysql)
/var/log/mysql/*.log {
    daily
    rotate 30
    compress
    missingok
    notifempty
    create 640 mysql mysql
    sharedscripts
    postrotate
        mysqladmin -u root -p flush-logs 2>/dev/null || true
    endscript
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved