| 日誌類型 | 用途 | 檔案特徵 |
| 錯誤日誌 | 啟動/關閉/錯誤/警告 | hostname.err,不可關閉 |
| 常規日誌 | 所有連接/查詢/操作 | mysql.log,量大需輪轉 |
| 更新日誌 | 修改數據的語句(已棄用) | mysql-bin.000001,5.1+改為二進制日誌 |
| 二進制日誌 | 複寫/時間點恢復/審計 | binlog.000001,核心日誌 |
| 慢查詢日誌 | 超時SQL分析 | slow.log,調優依據 |
| 中繼日誌 | 從庫接收的主庫binlog | relay-bin.000001,從庫專用 |
強制日誌輪轉:FLUSH LOGS
三種等效觸發方式:
1. 命令行 mysqladmin
mysqladmin -u root -p flush-logs
mysqladmin -u root -p refresh # 舊版本相容
2. SQL 命令
FLUSH LOGS;
3. 重啟服務
systemctl restart mysqld
輪轉效果:
- 關閉並重新打開所有日誌文件
- 二進制日誌:序號遞增(
binlog.000001 → binlog.000002)
- 常規/錯誤/慢查詢日誌:重新創建文件(舊文件需手動備份/清理)
常規日誌備份與清理標準流程
cd /var/lib/mysql
mv mysql.log mysql.log.$(date +%Y%m%d)
mysqladmin -u root -p flush-logs
# 此時產生新的 mysql.log
# 壓縮備份舊日誌
gzip mysql.log.$(date +%Y%m%d)
# 移至備份存儲或異地同步
二進制日誌管理最佳實踐
1. 自動過期清理(推薦)
[mysqld]
expire_logs_days = 7 # 自動清理7天前binlog
2. 手動清理(謹慎)
-- 清理指定文件前的所有binlog
PURGE MASTER LOGS TO 'binlog.000010';
-- 清理指定日期前的所有binlog
PURGE MASTER LOGS BEFORE '2024-01-01 00:00:00';
⚠️ 清理前必須確認:所有從庫已同步至該位點(SHOW SLAVE STATUS的Master_Log_File/Read_Master_Log_Pos)
3. 空間不足緊急處理
- 檢查
df -h確認磁碟壓力
- 臨時關閉binlog:
SET GLOBAL SQL_LOG_BIN=0;(僅當前會話)
- 清理已同步舊binlog
- 恢複
SET GLOBAL SQL_LOG_BIN=1;
慢查詢日誌輪轉
mv slow.log slow.log.$(date +%Y%m%d)
mysqladmin -u root -p flush-logs
# 分析舊日誌:pt-query-digest slow.log.20240115 > report.txt
日誌維護自動化腳本範例
#!/bin/bash
# log_rotate.sh - 每日logrotate或cron執行
LOG_DIR="/var/lib/mysql"
BACKUP_DIR="/backup/mysql_logs"
DATE=$(date +%Y%m%d)
mkdir -p "$BACKUP_DIR"
# 二進制日誌不在此處理(由expire_logs_days自動管理)
# 常規日誌
if [ -f "$LOG_DIR/mysql.log" ]; then
mv "$LOG_DIR/mysql.log" "$BACKUP_DIR/mysql.log.$DATE"
mysqladmin -u root -p"$MYSQL_ROOT_PASS" flush-logs
gzip "$BACKUP_DIR/mysql.log.$DATE"
fi
# 慢查詢日誌
if [ -f "$LOG_DIR/slow.log" ]; then
mv "$LOG_DIR/slow.log" "$BACKUP_DIR/slow.log.$DATE"
mysqladmin -u root -p"$MYSQL_ROOT_PASS" flush-logs
gzip "$BACKUP_DIR/slow.log.$DATE"
# 可選:生成分析報告
# pt-query-digest "$BACKUP_DIR/slow.log.$DATE.gz" > "$BACKUP_DIR/slow_report.$DATE.txt"
fi
# 清理30天前備份
find "$BACKUP_DIR" -name "*.gz" -mtime +30 -delete
關鍵監控指標
SHOW MASTER LOGS:binlog文件列表與大小
SHOW BINLOG EVENTS IN 'binlog.000010' LIMIT 10:檢視事件內容
SHOW SLAVE STATUS:從庫同步位點,清理binlog前必查
- 磁碟使用率告警閾值:80%
建立「自動輪轉→壓縮備份→異地同步→定期清理→監控告警」閉環,確保日誌既可用於恢復審計,又不佔用過多存儲資源。
- 上一篇文章: Linux下MySQL 5.1二進制包安裝標準化流程:從解壓到開機自啟全記錄
- 下一篇文章: MySQL字符集配置跨平台指南:Windows與Linux下UTF-8預設編碼一勞永逸設置
Copyright ©
程式碼之家 All Rights Reserved