

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# RDS for MySQL 資料庫日誌概觀
<a name="USER_LogAccess.MySQL.LogFileSize"></a>

您可以監控下列類型的 RDS for MySQL 日誌檔案：
+ 錯誤日誌
+ 慢查詢日誌
+ 一般日誌
+ 稽核日誌
+ 執行個體日誌
+ IAM 資料庫身分驗證錯誤日誌

預設情況下會產生 RDS for MySQL 錯誤日誌。透過在資料庫參數群組中設定參數，產生慢查詢日誌和一般日誌。

**Topics**
+ [RDS for MySQL 錯誤日誌](#USER_LogAccess.MySQL.Errorlog)
+ [RDS for MySQL 慢查詢與一般查詢](#USER_LogAccess.MySQL.Generallog)
+ [MySQL 稽核日誌](#USER_LogAccess.MySQL.Auditlog)
+ [MySQL RDS 的日誌輪換和保留](#USER_LogAccess.MySQL.LogFileSize.retention)
+ [重做日誌的大小限制](#USER_LogAccess.MySQL.LogFileSize.RedoLogs)

## RDS for MySQL 錯誤日誌
<a name="USER_LogAccess.MySQL.Errorlog"></a>

RDS for MySQL 會將錯誤寫入 `mysql-error.log` 檔案中。每個日誌檔案的產生時間 (UTC 時區) 皆會附加於檔案名稱中。日誌檔案也有時間戳記，可協助您判定日誌項目寫入的時間。

只有在開機、當機以及發生錯誤時，RDS for MySQL 才會寫入錯誤日誌。資料庫執行個體可在未寫入新項目到錯誤日誌的情況下持續執行數小時或數日。若您沒有看到最近的項目，這是因為伺服器未遇到需寫入日誌項目的錯誤。

根據設計，系統會篩選錯誤日誌，以僅顯示未預期的事件，例如錯誤。不過，錯誤日誌還包含一些其他未顯示的資料庫資訊，例如查詢進度。因此即使沒有任何實際錯誤，但錯誤日誌的大小可能會因為在進行的資料庫活動而增加。雖然您可能會在 中看到錯誤日誌的特定位元組或 KB 大小 AWS 管理主控台，但當您下載它們時，它們可能會有 0 個位元組。

RDS for MySQL 每 5 分鐘將 `mysql-error.log` 寫入磁碟一次。這會將日誌的內容追加到 `mysql-error-running.log`。

RDS for MySQL 每小時會輪換 `mysql-error-running.log` 檔案。它會保留最近兩週產生的日誌。

**注意**  
Amazon RDS 和 Aurora 的日誌保留期間不同。

## RDS for MySQL 慢查詢與一般查詢
<a name="USER_LogAccess.MySQL.Generallog"></a>

您可以將 RDS for MySQL 慢查詢日誌與一般日誌寫入至檔案或資料庫表格。若要這樣做，請在您的資料庫參數群組中設定參數。如需建立和修改資料庫參數群組的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。您必須先設定這些參數，才能在 Amazon RDS 主控台或使用 Amazon RDS API、Amazon RDS CLI 或 AWS SDKs來檢視慢查詢日誌或一般日誌。

您可以使用清單中的參數來控制 RDS for MySQL 日誌記錄：
+ `slow_query_log`：若要建立慢查詢，請設為 1。預設為 0。
+ `general_log`：若要建立一般日誌，請設為 1。預設值為 0。
+ `long_query_time`：若要避免快速執行查詢記錄於慢查詢日誌中，請為需記錄之最短查詢執行時間指定一個值，以秒為單位。預設為 10 秒，最短時間為 0。若 log\$1output = FILE，您可以指定以毫秒解析度為單位的浮點值。若 log\$1output = TABLE，您必須指定以秒為單位的整數值。只會記錄執行時間超過 `long_query_time` 值的查詢。例如，將 `long_query_time` 設為 0.1 可避免記錄任何在 100 毫秒內執行之查詢。
+ `log_queries_not_using_indexes`：若要將所有不使用索引的查詢記錄於慢查詢日誌中，請設為 1。系統會記錄不使用索引的查詢，即使其執行時間低於 `long_query_time` 參數的值。預設值為 0。
+ `log_output option`：您可為 `log_output` 參數指定下列其中一個選項。
  + **TABLE** (預設) – 將一般查詢寫入 `mysql.general_log` 表格，而慢查詢則寫入 `mysql.slow_log` 表格。
  + **FILE** – 同時將一般與慢查詢日誌寫入檔案系統中。
  + **NONE** – 停用日誌記錄。

若要讓慢速查詢資料出現在 Amazon CloudWatch Logs 中，必須符合下列條件：
+ CloudWatch Logs 必須設定為包含慢速查詢日誌。
+ 必須啟用 `slow_query_log`。
+ `log_output` 必須設定為 `FILE`。
+ 查詢必須花費超過為 `long_query_time` 設定的時間。

如需慢查詢與一般日誌的詳細資訊，請參閱 MySQL 文件中的下列主題：
+ [慢查詢日誌](https://dev.mysql.com/doc/refman/8.0/en/slow-query-log.html)
+ [一般查詢日誌](https://dev.mysql.com/doc/refman/8.0/en/query-log.html)

## MySQL 稽核日誌
<a name="USER_LogAccess.MySQL.Auditlog"></a>

若要存取稽核記錄，資料庫執行個體必須使用含有選項 `MARIADB_AUDIT_PLUGIN` 的自訂選項群組。如需詳細資訊，請參閱[MariaDB 稽核外掛程式支援 MySQL](Appendix.MySQL.Options.AuditPlugin.md)。

## MySQL RDS 的日誌輪換和保留
<a name="USER_LogAccess.MySQL.LogFileSize.retention"></a>

記錄啟用時，Amazon RDS 輪換表格日誌或以規律間隔來刪除日誌檔案。此方法為預防措施，可降低大型日誌檔封鎖資料庫使用或影響效能的可能性。RDS for MySQL 會處理輪流與刪除，如下所示：
+ MySQL 慢查詢日誌、錯誤日誌以及一般日誌檔案大小限制為不超過資料庫執行個體所配置之儲存空間的 2%。為保持此閾值，日誌會每小時自動輪換。MySQL 會移除兩週以上的日誌檔。若在移除舊日誌檔案後總日誌檔案大小仍超過閾值，將會從最舊的日誌檔案開始刪除，直到日誌檔案大小不再超過閾值為止。
+ 啟用 `FILE` 日誌記錄時，系統會每小時檢查日誌檔案，並刪除超過兩週的日誌檔案。在部分情況下，刪除後剩餘的總日誌檔大小可能超過資料庫執行個體配得之空間的 2% 閾值。於這些狀況中，最舊的日誌檔將遭刪除，直到日誌檔大小不再超過閾值。
+ 當 `TABLE` 日誌記錄啟用時，在某些情況下，日誌資料表每 24 小時會輪換一次。在表格日誌使用的空間超過所配置儲存空間的 20% 時，就會發生輪換。如果所有日誌合併後的大小超過 10 GB 時，也會發生這種情況。若資料庫執行個體使用的空間總量高於資料庫執行個體配得之儲存空間的 90% 時，日誌輪換的閾值將會降低。在表格日誌使用的空間超過所配置儲存空間的 10% 時，就會輪換日誌表格。如果所有日誌合併後的大小超過 5 GB 時，也會轉換它們。您可訂閱 `low storage` 事件類別，當日誌表格輪換以釋放空間時就會通知您。如需詳細資訊，請參閱[使用 Amazon RDS 事件通知](USER_Events.md)。

  輪換日誌表格時，目前日誌表格首先會複製到備份日誌表格。然後移除目前日誌表格中的項目。如果備份日誌資料表已存在，則其會在目前日誌資料表複製到備份之前刪除。如有需要，您可以查詢備份日誌資料表。`mysql.general_log` 資料表的備份日誌資料表名為 `mysql.general_log_backup`。`mysql.slow_log` 資料表的備份日誌資料表名為 `mysql.slow_log_backup`。

  您可以呼叫 `mysql.general_log` 程序來輪換 `mysql.rds_rotate_general_log` 表格。您可以呼叫 `mysql.slow_log` 程序來輪換 `mysql.rds_rotate_slow_log` 表格。

  表格日誌會在資料庫版本升級時輪換。

若要使用來自 Amazon RDS 主控台、Amazon RDS API、Amazon RDS CLI 或 AWS SDKs日誌，請將 `log_output` 參數設定為 FILE。如同 MySQL 錯誤日誌，這些日誌檔案也會每小時輪換。系統會保留在過去兩週內產生的日誌檔案。請注意，Amazon RDS 和 Aurora​ 的保留期間不同。

## 重做日誌的大小限制
<a name="USER_LogAccess.MySQL.LogFileSize.RedoLogs"></a>

對於 RDS for MySQL 8.0.32 版及更低版本，此參數的預設值為 256 MB。此數量的衍生方式是將 `innodb_log_file_size` 參數的預設值 (128 MB) 乘以 `innodb_log_files_in_group` 參數的預設值 (2)。如需詳細資訊，請參閱[設定 Amazon RDS for MySQL 參數的最佳實務，第一部分：效能相關參數](https://aws.amazon.com/blogs/database/best-practices-for-configuring-parameters-for-amazon-rds-for-mysql-part-1-parameters-related-to-performance/)。

對於 RDS for MySQL 8.0.33 版及更高次要版本，Amazon RDS 會使用 `innodb_redo_log_capacity` 參數，而不是 `innodb_log_file_size` 參數。`innodb_redo_log_capacity` 參數的 Amazon RDS 預設值為 2 GB。如需詳細資訊，請參閱 MySQL 文件中的 [MySQL 8.0.30 中的變更](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-30.html)。

從 MySQL 8.4 開始，Amazon RDS 預設會啟用 `innodb_dedicated_server` 參數。使用 `innodb_dedicated_server` 參數，資料庫引擎會計算 `innodb_buffer_pool_size` 和 `innodb_redo_log_capacity` 參數。如需詳細資訊，請參閱[在 MySQL 8.4 中設定緩衝集區大小和重做日誌容量](Appendix.MySQL.CommonDBATasks.Config.Size.8.4.md)。