| 日誌 | 啟動選項 | 內容 | 用途 |
|---|---|---|---|
| 一般日誌 | --log 或 --general-log | 連線、查詢、各類事件 | 審計、問題追蹤、行為分析 |
| 更新日誌 | --log-update (舊版)--log-bin (二進位日誌,現代標準) | 修改資料的 SQL (DELETE/INSERT/UPDATE/DDL/GRANT...) | 時間點恢復 (PITR)、主從複制、稽核 |
建議**同時啟用兩者**,熟悉後可僅保留二進位日誌節省空間。
命名模式:log → log.0 → log.1 ... 輪轉時重命名,最舊者刪除。
#!/bin/sh
LOG_DIR=/var/lib/mysql
LOG_BASE=mysql.log
KEEP_DAYS=7
cd $LOG_DIR
# 輪轉
mv -f $LOG_BASE.$KEEP_DAYS $LOG_BASE.$((KEEP_DAYS+1)) 2>/dev/null || true
for i in $(seq $KEEP_DAYS -1 1); do
mv -f $LOG_BASE.$((i-1)) $LOG_BASE.$i 2>/dev/null || true
done
mv -f $LOG_BASE $LOG_BASE.0
# 通知 Server 重新開啟日誌
mysqladmin -u root -p flush-logs
命名:binlog.000001, binlog.000002...
Server 啟動、FLUSH LOGS、達到 max_binlog_size 時自動產生新檔。
#!/bin/sh
LOG_DIR=/var/lib/mysql
KEEP_DAYS=7
find $LOG_DIR -name 'binlog.[0-9]*' -mtime +$KEEP_DAYS -delete
或直接設定 expire_logs_days=7 讓 Server 自動清理。
LOAD DATA INFILE 僅記錄 SQL 語句本身,**不記錄載入的資料行內容**。--log-bin=/mnt/binlog/binlog),避免資料磁碟損壞連帶日誌遺失。# crontab -e (mysql 用戶)
# 每天 04:00 輪轉一般日誌
0 4 * * * /usr/local/mysql/bin/rotate-logs.sh
# 每天 04:05 清理舊二進位日誌
5 4 * * * /usr/local/mysql/bin/purge-binlogs.sh
Linux 建議使用 logrotate 管理,MySQL 分發包含 mysql-log-rotate 範例設定。
啟動指定 --log-update=update.log (含副檔名),Server 收到 FLUSH LOGS 時關閉重開同名檔,**不產生序列檔**,輪轉腳本同一般日誌。