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

MySQL 日誌輪轉(Log Rotation)完整實作:僅保留一週日誌

     編輯:MySQL 資料庫相關知識

長期運行的 MySQL 會產生大量日誌(一般查詢日誌、慢查詢日誌、二進制日誌、錯誤日誌),若不輪轉會佔滿磁碟。本文示範用 mysqladmin flush-logs 搭配 Shell 腳本實現「按天輪轉、只保留 7 天」。

1. 查看目前日誌狀態

mysql> SHOW GLOBAL VARIABLES LIKE '%log%';

關鍵變數:general_log_file、slow_query_log_file、log_bin、log_error。
注意:log_error(mysqld.log)無法用 flush-logs 重開,需靠系統 logrotate 管理。

2. 建立專用輪轉帳號

GRANT RELOAD ON *.* TO 'logrot'@'localhost' IDENTIFIED BY 'strong_password';
FLUSH PRIVILEGES;

RELOAD 權限對應 FLUSH LOGS 操作。

3. 輪轉 Shell 腳本 /usr/local/bin/mysql_log_rotate.sh

#!/bin/bash
# MySQL 日誌輪轉:保留 7 天(按星期數 0-6 命名,次週自動覆蓋)
LOG_FILE="$1"
[ -f "$LOG_FILE" ] || { echo "Log file not exist: $LOG_FILE"; exit 1; }

DB_USER="logrot"
DB_PASS="strong_password"
BIN_DIR="/usr/local/mysql/bin"
DAY_OF_WEEK=$(date +%w)   # 0=Sun ... 6=Sat

mv "${LOG_FILE}" "${LOG_FILE}_${DAY_OF_WEEK}"
${BIN_DIR}/mysqladmin -u${DB_USER} -p${DB_PASS} flush-logs
echo "Rotated ${LOG_FILE} -> ${LOG_FILE}_${DAY_OF_WEEK}"

授權執行:chmod +x /usr/local/bin/mysql_log_rotate.sh

4. 執行測試

/usr/local/bin/mysql_log_rotate.sh /usr/local/mysql/mysql.log
ls -l /usr/local/mysql/mysql.log*
# 輸出:mysql.log  mysql.log_3   (假設今天是星期三)

5. 加入 crontab 定時執行

# 每天 00:10 輪轉一般查詢日誌與慢查詢日誌
10 0 * * * /usr/local/bin/mysql_log_rotate.sh /usr/local/mysql/mysql.log
10 0 * * * /usr/local/bin/mysql_log_rotate.sh /usr/local/mysql/mysql-slow.log

6. 二進制日誌自動過期(建議)

在 my.cnf 設定:

[mysqld]
expire_logs_days = 7
max_binlog_size = 1G

MySQL 會自動清理超過 7 天的 binlog,無需額外腳本。

7. 錯誤日誌交給 logrotate

/var/log/mysqld.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 640 mysql mysql
    sharedscripts
    postrotate
        /usr/local/mysql/bin/mysqladmin -u logrot -p'strong_password' flush-logs 2>/dev/null || true
    endscript
}

存為 /etc/logrotate.d/mysql-error,系統每天自動處理。

總結

  • 一般/慢查詢日誌 → 自製腳本 + flush-logs + 7 天覆蓋。
  • 二進制日誌 → expire_logs_days 參數自動管理。
  • 錯誤日誌 → 系統 logrotate 管理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved