如第 7.4 節,「MySQL 伺服器日誌」中所述,MySQL 伺服器可以建立數個不同的日誌檔案,以協助您查看正在進行的活動。不過,您必須定期清理這些檔案,以確保日誌不會佔用太多磁碟空間。
當使用啟用記錄的 MySQL 時,您可能希望不時備份和移除舊的日誌檔案,並告知 MySQL 開始記錄到新的檔案。請參閱第 9.2 節,「資料庫備份方法」。
在 Linux (Red Hat) 安裝上,您可以使用 mysql-log-rotate
指令碼進行日誌維護。如果您是從 RPM 發行版本安裝 MySQL,則應已自動安裝此指令碼。如果您將二進位日誌用於複寫,請小心使用此指令碼。在您確定所有複本都已處理其內容之前,不應移除二進位日誌。
在其他系統上,您必須自行安裝一個簡短的指令碼,並從 cron (或其對等項目) 啟動它,以處理日誌檔案。
二進位日誌檔案會在伺服器的二進位日誌過期時間後自動移除。檔案的移除可能會在啟動時以及刷新二進位日誌時發生。預設二進位日誌過期時間為 30 天。若要指定其他過期時間,請使用 binlog_expire_logs_seconds
系統變數。如果您使用複寫,則應指定不高於複本可能落後來源的最大時間量的過期時間。若要依需求移除二進位日誌,請使用 PURGE BINARY LOGS
陳述式 (請參閱第 15.4.1.1 節,「PURGE BINARY LOGS 陳述式」)。
若要強制 MySQL 開始使用新的日誌檔案,請刷新日誌。當您執行 FLUSH LOGS
陳述式或 mysqladmin flush-logs、mysqladmin refresh、mysqldump --flush-logs
或 mysqldump --source-data
命令時,會發生日誌刷新。請參閱第 15.7.8.3 節,「FLUSH 陳述式」、第 6.5.2 節,「mysqladmin — MySQL 伺服器管理程式」,以及第 6.5.4 節,「mysqldump — 資料庫備份程式」。此外,當目前二進位日誌檔案大小達到 max_binlog_size
系統變數的值時,伺服器會自動刷新二進位日誌。
FLUSH LOGS
支援選用的修飾詞,以啟用選擇性刷新個別日誌 (例如,FLUSH BINARY LOGS
)。請參閱第 15.7.8.3 節,「FLUSH 陳述式」。
日誌刷新操作具有下列效果
如果已啟用二進位記錄,則伺服器會關閉目前的二進位日誌檔案,並以序列中的下一個編號開啟新的日誌檔案。
如果已啟用對日誌檔案的一般查詢記錄或慢速查詢記錄,則伺服器會關閉並重新開啟日誌檔案。
如果伺服器啟動時使用了
--log-error
選項來將錯誤日誌寫入檔案,伺服器會關閉並重新開啟該日誌檔案。
執行日誌刷新語句或命令需要使用具有 RELOAD
權限的帳戶連線到伺服器。在 Unix 和類 Unix 系統上,另一種刷新日誌的方法是向伺服器發送訊號,這可以由 root
或擁有伺服器程序的帳戶完成。(請參閱第 6.10 節,「MySQL 中的 Unix 訊號處理」。)訊號允許在不必連線到伺服器的情況下執行日誌刷新。
SIGHUP
訊號會刷新所有日誌。但是,SIGHUP
除了刷新日誌外,還有其他可能不希望出現的影響。SIGUSR1
會導致伺服器刷新錯誤日誌、一般查詢日誌和慢查詢日誌。如果您只想刷新這些日誌,則可以使用SIGUSR1
作為更「輕量級」的訊號,該訊號沒有與日誌無關的SIGHUP
影響。
如前所述,刷新二進位日誌會建立一個新的二進位日誌檔案,而刷新一般查詢日誌、慢查詢日誌或錯誤日誌只會關閉並重新開啟日誌檔案。對於後者這些日誌,要在 Unix 上建立新的日誌檔案,請先重新命名目前的日誌檔案,然後再刷新它。在刷新時,伺服器會使用原始名稱開啟新的日誌檔案。例如,如果一般查詢日誌、慢查詢日誌和錯誤日誌檔案分別命名為 mysql.log
、mysql-slow.log
和 err.log
,您可以從命令列使用如下一系列命令
cd mysql-data-directory
mv mysql.log mysql.log.old
mv mysql-slow.log mysql-slow.log.old
mv err.log err.log.old
mysqladmin flush-logs
在 Windows 上,請使用 rename 而不是 mv。
此時,您可以備份 mysql.log.old
、mysql-slow.log.old
和 err.log.old
,然後將它們從磁碟中刪除。
要在執行期間重新命名一般查詢日誌或慢查詢日誌,請先連線到伺服器並停用日誌
SET GLOBAL general_log = 'OFF';
SET GLOBAL slow_query_log = 'OFF';
在日誌停用的情況下,在外部重新命名日誌檔案(例如,從命令列)。然後再次啟用日誌
SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';
此方法適用於任何平台,並且不需要重新啟動伺服器。
為了讓伺服器在您於外部重新命名檔案後重新建立指定的日誌檔案,該檔案的位置必須可由伺服器寫入。情況可能不總是如此。例如,在 Linux 上,伺服器可能會將錯誤日誌寫入為 /var/log/mysqld.log
,其中 /var/log
歸 root
所有,並且 mysqld 無法寫入。在這種情況下,日誌刷新操作將無法建立新的日誌檔案。
為了處理這種情況,您必須在重新命名原始日誌檔案後,手動建立具有正確所有權的新日誌檔案。例如,以 root
執行這些命令
mv /var/log/mysqld.log /var/log/mysqld.log.old
install -omysql -gmysql -m0644 /dev/null /var/log/mysqld.log