MySQL 伺服器運行過程中會產生多種日誌,這些日誌對於故障排查、效能調優、資料恢複與安全稽核至關重要。MySQL 主要包含四大類日誌:錯誤日誌、二進制日誌、查詢日誌 (General Log) 與 慢查詢日誌。本文將逐一詳細說明各類日誌的功能、查看路徑、啟用/停用配置及常用管理指令。
錯誤日誌記錄了 MySQL 服務啟動、停止過程中的資訊,以及運行期間發生的嚴重錯誤 (如資料表損壞、記憶體不足等)。這是診斷資料庫無法啟動或異常崩潰的首要依據。
mysql> SHOW VARIABLES LIKE 'log_error%';
輸出範例顯示路徑為 .\HUEY-PC.err (Windows 相對路徑),實際檔案通常位於資料目錄下。
編輯配置檔 my.ini (Windows) 或 my.cnf (Linux),在 [mysqld] 區段下設定:
[mysqld]
log-error="自訂路徑/檔案名.err"
修改後需重啟 MySQL 服務生效。
錯誤日誌為純文字檔,可直接用文字編輯器開啟,或使用 tail -f (Linux) 即時監看。
二進制日誌記錄所有修改資料的 DDL (如 CREATE, ALTER) 與 DML (如 INSERT, UPDATE, DELETE) 語句,不包含 單純查詢的 SELECT 語句。它是主從複制與資料時間點恢複 (PITR) 的核心基礎。
mysql> SHOW VARIABLES LIKE 'log_bin%';
關鍵欄位:log_bin 顯示 ON 表示已啟用;log_bin_basename 顯示檔案基礎名稱。
編輯 my.ini/my.cnf,在 [mysqld] 區段添加:
[mysqld]
log-bin="自訂檔案名稱"
建議同時設定 server-id (主從複制必須)。儲存後重啟服務。
二進制日誌為二進制格式,需使用 mysqlbinlog 工具解析:
mysqlbinlog HUEY-PC-bin.000001
expire_logs_days)在配置檔中設定保留天數,MySQL 會自動刪除過期日誌 (於服務啟動或日誌切換時生效):
[mysqld]
expire_logs_days = 7
查詢日誌記錄所有客戶端連接與執行的 SQL 語句 (含 SELECT)。高併發環境下會產生大量 I/O,嚴重影響效能,生產環境通常建議關閉,僅在開發除錯時短暫開啟。
mysql> SHOW VARIABLES LIKE 'general_log%';
[mysqld]
log-output=FILE
general-log=1
general_log_file="自訂路徑/檔案名.log"
[mysqld]
log-output=NONE
general-log=0
修改配置後均需重啟服務。
慢查詢日誌記錄執行時間超過 long_query_time (預設 10 秒) 的 SQL 語句,是 SQL 調優的關鍵數據來源。
mysql> SHOW VARIABLES LIKE 'slow_query_log%';
[mysqld]
log-output=FILE
slow-query-log=1
slow_query_log_file="自訂路徑/檔案名-slow.log"
long_query_time=2
建議將 long_query_time 設為 1-2 秒以捕捉更多潛在慢查詢。修改後重啟服務。
[mysqld]
log-output=NONE
slow-query-log=0
最佳實踐建議: 生產環境務必啟用二進制日誌與慢查詢日誌,並配置合理的過期清理策略;錯誤日誌預設即開啟;查詢日誌平時關閉,需要時動態開啟 (MySQL 5.1+ 支援 SET GLOBAL general_log = ON; 無需重啟)。