日志文件隨時間增長會佔用大量磁碟,定期輪轉與備份是 DBA 必備技能。本文匯總 FLUSH LOGS 多種觸發方式及通用日志備份具體步驟。
以下操作均會**關閉當前日志、開啟新日志**;若日志文件無擴展名,新文件擴展數字自增 1。
| 方法 | 命令/語句 | 適用版本/場景 |
|---|---|---|
| mysqladmin flush-logs | mysqladmin -u root -p flush-logs | 所有版本,推薦 |
| mysqladmin refresh | mysqladmin -u root -p refresh | MySQL 3.21 及更早版本必須用此法 |
| SQL 語句 | FLUSH LOGS; | 客戶端、腳本、定時任務中調用 |
| 重啟服務器 | 重啟 mysqld 進程 | 維護窗口、配置變更同步生效時 |
通用日志記錄所有連接與查詢,不像更新日志有自動擴展機制,需手動輪轉:
cd /var/lib/mysql # 進入數據目錄 mv mysql.log mysql.old # 重命名舊日志 mysqladmin flush-tables # 刷新表緩存,迫使服務器重新打開日志文件 # 備份 mysql.old 到異地存儲 rm mysql.old # 確認備份無誤後刪除
注意:flush-tables 而非 flush-logs,因通用日志文件句柄在表緩存中。
mysqld_safe 重定向至 hostname.err,系統日志輪轉工具(logrotate)管理即可。FLUSH LOGS 或 mysqladmin flush-logs 可輪轉。logrotate 管理錯誤日志、慢查詢日志(每日輪轉、保留 30 天、壓縮)。expire_logs_days 參數自動清理,或編寫腳本定時 FLUSH LOGS + 異地備份。general_log=OFF),僅排查問題時臨時開啟。