| 日志類型 | 啟動參數 | 核心價值 | 適用場景 |
|---|---|---|---|
| 錯誤日志 | --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+ 秒級精度
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