錯誤日誌是診斷 MySQL 啟動失敗、異常關機、損壞恢復、權限問題的首要依據。掌握配置、查看、輪轉、分析全流程。
datadir) 下,檔名 hostname.err (如 ovonel-usa.err)# /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
log-error = /var/log/mysql/mysql-error.log
# 或相對路徑 (相對 datadir)
log-error = mysql-error.log
修改後需重啟服務生效。
# 1. 查看當前錯誤日誌配置
mysql> SHOW VARIABLES LIKE 'log_error';
# 2. 故意加入錯誤參數測試
# vi /etc/my.cnf
[mysqld]
skip-opt # 不存在的參數
# 3. 重啟觀察
service mysqld restart
# 失敗,查看日誌
cat /var/log/mysql/mysql-error.log
# 輸出含:
# [ERROR] unknown variable 'skip-opt'
# [ERROR] Aborting
2024-01-15T10:30:45.123456Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.33) starting as process 1234
2024-01-15T10:30:45.123789Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-01-15T10:30:46.456123Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-01-15T10:30:46.789012Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2024-01-15T10:30:46.789345Z 0 [System] [MY-010931] [Server] ready for connections. Version: '8.0.33' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
關鍵欄位:時間戳 (ISO8601)、線程 ID、錯誤等級 (System/Warning/Error)、錯誤代碼 [MY-XXXXX]、組件 [Server/InnoDB/Repl]、訊息內容。
mysqladmin -u root -p flush-logs (重新打開日誌檔案,舊檔需自行備份/刪除)/var/log/mysql/mysql-error.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 640 mysql mysql
sharedscripts
postrotate
mysqladmin -u root -p flush-logs 2>/dev/null || true
endscript
}
log_error_services = 'log_filter_internal; log_sink_internal; log_sink_test' 可配合元件化日誌沉澱。| 代碼 | 含義 | 典型場景 |
|---|---|---|
| MY-010116 | Server 起始 | 正常啟動 |
| MY-010931 | Ready for connections | 正常就緒 |
| MY-013576/77 | InnoDB 初始化開始/結束 | 正常/異常恢復 |
| MY-000000 | 通用錯誤 | 參數錯誤、權限不足、磁碟滿 |
| MY-010874 | InnoDB 頁檢驗和失敗 | 資料損壞、硬體故障 |
| MY-011071 | 主從複寫 SQL 執行錯誤 | 從庫重放失敗 |