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

MySQL 日志體系全解析:錯誤/查詢/慢查詢/事務/二進制五大日志原理、配置與運維實戰

     編輯:MySQL 資料庫相關知識

五大日志核心定位

日志作用默認狀態關鍵參數
錯誤日志記錄啟動/運行/關閉錯誤及關鍵事件強制開啟,不可禁用log_error, log_warnings
通用查詢日志記錄所有連接與 SQL 執行關閉general_log, general_log_file, log_output
慢查詢日志記錄超時/無索引查詢,性能調優核心關閉slow_query_log, long_query_time, log_queries_not_using_indexes
事務日志 (Redo)InnoDB 專有,WAL 機制保證持久性與崩潰恢復內建innodb_flush_log_at_trx_commit, innodb_log_file_size, innodb_log_files_in_group
二進制日志記錄所有數據變更,支撐主從復制、時間點恢復關閉log_bin, binlog_format, sync_binlog, expire_logs_days

錯誤日志:配置與輪轉

關鍵變量

  • log_error:文件路徑(默認 hostname.err,數據目錄下)。
  • log_warnings:1=記錄警告(默認),>1=記錄連接失敗/拒絕訪問,0=關閉。

查看示例

tail -20 /mydata/data/hostname.err
# 輸出包含:InnoDB 初始化、Buffer Pool 大小、端口綁定、Event Scheduler 狀態、Socket 文件創建等

輪轉策略 (5.5.7+)

舊版 FLUSH LOGS 可重新打開錯誤日志;新版需手動:

mv hostname.err hostname.err.old
mysqladmin flush-logs  # 生成新 hostname.err

通用查詢日志:謹慎開啟

  • general_log=ON、general_log_file 指定路徑。
  • log_output:FILE (默認)、TABLE (寫 mysql.general_log 表)、NONE (不落地)。
  • 高並發下產生海量 I/O,**生產環境強烈建議關閉**,僅調試短期開啟。

慢查詢日志:必開良習

配置

slow_query_log=1
long_query_time=1          # 秒,支持微秒,默認 10s
log_queries_not_using_indexes=1  # 記錄無索引查詢
slow_query_log_file=/var/log/mysql/slow.log

動態調整驗證

SET GLOBAL slow_query_log=1;
SET SESSION long_query_time=0.001;  -- 當前會話生效
SET GLOBAL long_query_time=0.001;   -- 全局生效(重啟失效,需寫配置)

日志內容解讀

# Time: 231007 23:46:33
# User@Host: root[root] @ localhost []
# Query_time: 0.108459  Lock_time: 0.000216  Rows_sent: 4  Rows_examined: 6
SET TIMESTAMP=1381160793;
SELECT user,host,password FROM user WHERE user="root";

事務日志:InnoDB WAL 核心

  • 修改內存頁 → 記錄 Redo Log (順序寫) → 後台刷髒頁。順序 I/O 遠快於隨機 I/O。
  • innodb_flush_log_at_trx_commit:1=提交同步刷盤 (最安全),2=提交寫文件系統緩存,0=僅靠後台每秒刷盤。
  • 文件:ib_logfile0/1,默認 5MB/個,建議 256MB+。

二進制日志:復制與恢復基石

三種格式

  • STATEMENT:記錄 SQL 邏輯,體積小,但非確定函數 (UUID()/NOW()) 導致主從不一致風險。
  • ROW:記錄行級變更,精確、體積大,支持 READ COMMITTED 並發優化。
  • MIXED (默認/推薦):一般用 STATEMENT,特定場景自動切 ROW。

關鍵管理操作

SHOW BINARY LOGS;              -- 列出所有文件大小
SHOW MASTER STATUS;            -- 當前寫入文件及 Position
FLUSH LOGS;                    -- 切換新文件 (編號+1)
SHOW BINLOG EVENTS [IN 'file'] [FROM pos] [LIMIT n];  -- 解析事件

mysqlbinlog 命令行工具

# 解析文件
mysqlbinlog mysql-bin.000011

# 按時間導出
mysqlbinlog --start-datetime='2023-01-01' --stop-datetime='2023-01-02' mysql-bin.000011 > /tmp/a.sql

# 導入恢復
mysql < /tmp/a.sql

清理策略

  • expire_logs_days=N:自動過期刪除 (啟動/FLUSH LOGS 時觸發)。
  • PURGE BINARY LOGS TO 'mysql-bin.000007';:刪除指定文件之前的所有。
  • PURGE BINARY LOGS BEFORE '2023-10-19 10:26:36';:刪除指定時間前的。
  • 禁用 RESET MASTER (刪除所有並重置編號),生產環境極度危險。

常用日志相關變量速查表 (40+ 參數)

文中匯總了 expire_logs_days、general_log、binlog_format、log_output、log_error、log_warnings、long_query_time、max_binlog_size、sync_binlog、innodb_log_buffer_size、innodb_log_file_size、innodb_log_files_in_group、innodb_support_xa、relay_log、slow_query_log、sql_log_bin 等 40 余個變量的作用域、動態性、默認值及建議值,建議收藏備查。

參數示例 參數示例 參數示例

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved