MySQL 提供多種日誌記錄運行狀態、審計操作、支援復制與時間點恢復。本文整理各類日誌的啟用方式、查看命令、關鍵參數解讀,幫助 DVA 快速定位問題。
| 日誌 | 用途 | 關鍵參數 |
|---|---|---|
| 錯誤日誌 | 啟動/運行/關閉錯誤 | log_error |
| 通用查詢日誌 | 客戶端連接、所有 SQL | general_log, general_log_file |
| 二進制日誌 | 資料變更語句、復制、PITR | log_bin, binlog_format |
| 慢查詢日誌 | 超時或無索引查詢 | slow_query_log, long_query_time |
| 中繼日誌 | 從庫回放主庫 Binlog | relay_log |
-- 1. 所有 log 相關變數
SHOW GLOBAL VARIABLES LIKE '%log%';
-- 2. 專門查看 log_ 開頭變數
SHOW VARIABLES LIKE 'log_%';
-- 3. 查看當前 Binlog 位置(主庫)
SHOW MASTER STATUS;
-- 4. 查看從庫複制狀態
SHOW SLAVE STATUS\G
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2 -- 超過 2 秒記錄
log_queries_not_using_indexes = ON -- 記錄無索引查詢
分析工具:mysqldumpslow、pt-query-digest。
-- 動態開啟
SET GLOBAL general_log = ON;
SET GLOBAL general_log_file = '/var/log/mysql/general.log';
-- 查看狀態
SHOW VARIABLES LIKE 'general_log%';
⚠️ 生產環境嚴禁長期開啟,會產生海量 I/O、佔滿磁碟。
[mysqld]
log_bin = mysql-bin
binlog_format = ROW -- ROW/STATEMENT/MIXED
expire_logs_days = 7 -- 自動清理 7 天前日誌
max_binlog_size = 1G -- 單檔上限
sync_binlog = 1 -- 每次提交 fsync,最安全
查看內容:mysqlbinlog mysql-bin.000001 | less。
位置由 log_error 指定,通常在資料目錄下 hostname.err。啟動失敗、異常關閉、InnoDB 恢復資訊皆記錄於此。
logrotate 每日切割、壓縮、保留 30 天。ERROR 關鍵字告警。sync_binlog=1 最安全但效能稍損;高併發可設 100-1000 配合電池備援 RAID 卡折衷。善用日誌是資料庫可觀測性的核心,建議將上述配置納入標準化 my.cnf 模板,新實例部署即合規。