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


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

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