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

MySQL日志管理體系:六大日志類型、輪轉策略與主從協同清理機制

     編輯:MySQL 資料庫相關知識

日志類型全景圖

日志類型啟動參數核心價值適用場景
錯誤日志 --log-error[=file] 服務啟動/異常/關鍵事件審計 故障診斷、安全審計、必須啟用
通用查詢日志 --log[=file] 所有連接/查詢記錄(含未執行) 審計、問題SQL回溯、性能影響大慎開
慢查詢日志 --slow-query-log[=file] --long-query-time=N 超過閾值/未使用索引的查詢 性能調優核心數據源,建議長期開啟
二進制日志 --log-bin[=file] --binlog-format=ROW 事務級變更記錄,支持復制/時間點恢復 主從復制、PITR、數據審計,核心業務必開
中繼日志 Slave自動生成 從Master拉取的Binlog本地緩存 復制鏈路核心組件
InnoDB Redo/Undo Log 引擎內部管理 崩溃恢復/事務隔離/MVCC基石 引擎層面,不可禁用

日志刷新與輪轉機制

統一刷新入口

# 以下命令等效,觸發所有文本日志輪轉(錯誤日志/Redo Log除外)
mysqladmin flush-logs
# 或
FLUSH LOGS;
# 或發送信號
kill -SIGHUP $(cat mysqld.pid)

通用/慢查詢日志:基於文件大小/時間的輪轉腳本

#!/bin/bash
# /usr/local/bin/mysql_log_rotate.sh
LOG_DIR="/var/log/mysql"
KEEP_DAYS=30

# 1. 觸發MySQL內部輪轉(生成 .1 .2 ... 文件)
mysqladmin -u root -p"$MYSQL_ROOT_PWD" flush-logs

# 2. 清理舊歸檔日志
find "$LOG_DIR" -name "*.log.*" -mtime +$KEEP_DAYS -delete

# 3. 壓縮歸檔節省空間
find "$LOG_DIR" -name "*.log.*" ! -name "*.gz" -exec gzip {} \;

配置logrotate系統級調度:

# /etc/logrotate.d/mysql
/var/log/mysql/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    sharedscripts
    postrotate
        mysqladmin -u root -p"$MYSQL_ROOT_PWD" flush-logs > /dev/null 2>&1 || true
    endscript
}

二進制日志:主從協同的智能清理

核心原則:只有所有Slave已消費的Binlog才能刪除。

# 1. 檢查所有Slave進度
SHOW SLAVE STATUS\G  # 關注 Master_Log_File, Read_Master_Log_Pos

# 2. Master執行安全清理(假設最舊活躍Slave讀至 mysql-bin.000123)
PURGE BINARY LOGS TO 'mysql-bin.000123';

# 3. 自動過期設置(配置文件)
[mysqld]
expire_logs_days=7        # 7天自動清理(需確保Slave延遲<7天)
binlog_expire_logs_seconds=604800  # MySQL 8.0+ 秒級精度

Windows平台特殊處理

  • 文件鎖定機制導致無法在線重命名,需停服務輪轉
  • 批處理腳本rotate_log.bat配合任務計劃程序執行
  • 錯誤日志固定寫入datadir\hostname.err,--console參數重定向到控制台

日志分析工具鏈

工具用途典型命令
mysqldumpslow 慢查詢日志聚合分析 mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
pt-query-digest 專業級慢查詢分析報告 pt-query-digest /var/log/mysql/slow.log --output=html > report.html
mysqlbinlog Binlog解析/恢復/審計 mysqlbinlog --base64-output=decode-rows -v mysql-bin.000123
grep/awk 錯誤日志快速篩選 grep -i "error\|warning\|aborted" /var/log/mysql/error.log

審計級日志配置模板(生產環境)

[mysqld]
# 錯誤日志
log-error=/var/log/mysql/error.log

# 慢查詢日志(核心調優數據源)
slow-query-log=1
slow-query-log-file=/var/log/mysql/slow.log
long-query-time=0.5          # 500ms閾值
log-queries-not-using-indexes=1
log-slow-admin-statements=1
log-slow-slave-statements=1

# 二進制日志(復制+PITR)
log-bin=/var/log/mysql/binlog
binlog-format=ROW
binlog-row-image=FULL
sync_binlog=1
expire_logs_days=7
max_binlog_size=100M

# 通用查詢日志(審計合規需求時啟用)
# general-log=1
# general-log-file=/var/log/mysql/general.log
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved