文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  伺服器日誌維護

7.4.6 伺服器日誌維護

第 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-logsmysqladmin refreshmysqldump --flush-logsmysqldump --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.logmysql-slow.logerr.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.oldmysql-slow.log.olderr.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/logroot 所有,並且 mysqld 無法寫入。在這種情況下,日誌刷新操作將無法建立新的日誌檔案。

為了處理這種情況,您必須在重新命名原始日誌檔案後,手動建立具有正確所有權的新日誌檔案。例如,以 root 執行這些命令

mv /var/log/mysqld.log /var/log/mysqld.log.old
install -omysql -gmysql -m0644 /dev/null /var/log/mysqld.log