MySQL 日志體系龐大複雜,正確理解各類日志的作用、配置與維護,是數據庫運維的核心技能。本文將日志分為「事務日志」與「事件日志」兩大類,逐一拆解六大子類型的功能、配置與最佳實踐。
默認兩個文件 ibdata1、ibdata2 位於數據目錄,屬 InnoDB 專用。
[mysqld]
innodb_data_home_dir = /innodata # 日志目錄
innodb_data_file_path = ibdata1:1024M # 初始文件大小
innodb_data_file_path = ibdata2:50M:autoextend # 自動擴展策略
hostname.errlog-error=/path/to/error.log(需 mysql 用戶寫權限)mysql-bin.000001
log-bin=mysql-bin # 日志文件名
log-bin-index=mysql-bin.index # 索引文件
PURGE BINARY LOGS BEFORE 'mysql-bin.000010';
PURGE BINARY LOGS BEFORE '2024-01-15 12:00:00';
切勿直接 rm 刪除文件,會導致索引不一致general_log=ON|OFF、log_output=FILE|TABLE(TABLE 便於 SQL 查詢分析)
slow_query_log=ON
slow_query_log_file=/var/log/mysql-slow.log
long_query_time=2 # 秒,建議 1-2 秒
SET GLOBAL slow_query_log=ON;relay-log=relay-bin、relay-log-index=relay-bin.indexFLUSH LOGS(同時觸發錯誤日志、慢查詢日志滾動)| 維度 | 事務日志 | 二進制日志 |
|---|---|---|
| 恢復方式 | 系統自動(崩潰恢復) | 人工干預(時間點恢復) |
| 記錄粒度 | 物理頁變更 | 邏輯 SQL 語句 |
| 引擎綁定 | InnoDB 專有 | Server 層,引擎無關 |
PURGE BINARY LOGS 釋放磁盤空間,配合 expire_logs_days=7 自動過期pt-query-digest 或 mysqldumpslow 定期分析