

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

# MySQL資料庫日誌檔案
<a name="USER_LogAccess.Concepts.MySQL"></a>

您可以透過 Amazon RDS 主控台、Amazon RDS API AWS CLI或 AWS SDKs 直接監控 MySQL 日誌。您可以將日誌指向主要資料庫中的資料庫表並查詢該表格，藉此存取 MySQL 日誌。您可以使用 mysqlbinlog 公用程式來下載二進位日誌。

如需關於檢視、下載與查看資料庫日誌檔案的資訊，請參閱[監控 Amazon RDS 日誌檔案](USER_LogAccess.md)。

**Topics**
+ [RDS for MySQL 資料庫日誌概觀](USER_LogAccess.MySQL.LogFileSize.md)
+ [將 MySQL 日誌發佈至 Amazon CloudWatch Logs](USER_LogAccess.MySQLDB.PublishtoCloudWatchLogs.md)
+ [將 MySQL日誌輸出傳送至資料表](Appendix.MySQL.CommonDBATasks.Logs.md)
+ [為單一可用區資料庫設定 RDS for MySQL 二進位記錄](USER_LogAccess.MySQL.BinaryFormat.md)
+ [為多可用區域資料庫叢集設定 MySQL 二進位記錄](USER_Binlog.MultiAZ.md)
+ [存取 MySQL 二進位日誌](USER_LogAccess.MySQL.Binarylog.md)

# 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)。

# 將 MySQL 日誌發佈至 Amazon CloudWatch Logs
<a name="USER_LogAccess.MySQLDB.PublishtoCloudWatchLogs"></a>

您可以設定 MySQL 資料庫執行個體，以將日誌資料發佈至 Amazon CloudWatch Logs 中的日誌群組。使用 CloudWatch Logs，您可以執行日誌資料的即時分析，並使用 CloudWatch 來建立警示和檢視指標。您可以使用 CloudWatch Logs 將日誌記錄存放在高耐用性的儲存裝置中。

Amazon RDS 將每個 MySQL 資料庫日誌發佈為日誌群組中獨立的資料庫流。例如，若您設定匯出功能以包含慢查詢日誌，則慢查詢資料會存放在 `/aws/rds/instance/my_instance/slowquery` 日誌群組內的慢查詢日誌串流中。

錯誤日誌預設為啟用。下表摘要說明其他 MySQL 日誌的要求。


| 日誌 | 要求 | 
| --- | --- | 
|  稽核日誌  |  資料庫執行個體必須使用含有選項 `MARIADB_AUDIT_PLUGIN` 的自訂選項群組。  | 
|  一般日誌  |  資料庫執行個體必須使用含有參數設定 `general_log = 1` 的自訂參數群組，以啟用一般日誌。  | 
|  慢查詢日誌  |  資料庫執行個體必須使用含有參數設定 `slow_query_log = 1` 的自訂參數群組，以啟用慢查詢日誌。  | 
|  IAM 資料庫身分驗證錯誤日誌  |  您必須透過建立或修改資料庫執行個體來啟用資料庫執行個體的日誌類型 `iam-db-auth-error`。  | 
|  記錄輸出  |  資料庫執行個體必須使用含有參數設定 `log_output = FILE` 的自訂參數群組，以將日誌寫入到檔案系統，並發佈到 CloudWatch Logs。  | 

## 主控台
<a name="USER_LogAccess.MySQL.PublishtoCloudWatchLogs.CON"></a>

**使用主控台將 MySQL 日誌發佈到 CloudWatch Logs**

1. 前往 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)，開啟 Amazon RDS 主控台。

1. 在導覽窗格中選擇 **Databases** (資料庫)，然後選擇您要修改的資料庫執行個體。

1. 選擇 **Modify (修改)**。

1. 在 **Log exports (日誌匯出)** 區段中，選擇您要開始發佈至 CloudWatch Logs 的日誌。

1. 選擇 **Continue (繼續)**，然後在摘要頁面上選擇 **Modify DB Instance (修改資料庫執行個體)**。

## AWS CLI
<a name="USER_LogAccess.MySQL.PublishtoCloudWatchLogs.CLI"></a>

 您可以使用 AWS CLI 來發佈 MySQL 日誌。您可以使用下列參數來呼叫 [https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令：
+ `--db-instance-identifier`
+ `--cloudwatch-logs-export-configuration`

**注意**  
`--cloudwatch-logs-export-configuration` 選項的變更一律立即套用到資料庫執行個體。因此，`--apply-immediately` 和 `--no-apply-immediately` 選項沒有效果。

您也可以呼叫下列 AWS CLI 命令來發佈 MySQL 日誌：
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-s3.html)
+ [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html)

執行上述其中一個 AWS CLI 命令並指定下列選項：
+ `--db-instance-identifier`
+ `--enable-cloudwatch-logs-exports`
+ `--db-instance-class`
+ `--engine`

視您執行的 AWS CLI 命令而定，可能需要其他選項。

**Example**  
下列範例修改現有的 MySQL 資料庫執行個體後，即可將日誌檔案發佈至 CloudWatch Logs。`--cloudwatch-logs-export-configuration` 值為 JSON 物件。此物件的金鑰為 `EnableLogTypes`，而其值為字串陣列，其中包含 `audit`、`error`、`general` 以及 `slowquery` 的任意組合。  
針對 Linux、macOS 或 Unix：  

```
1. aws rds modify-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}'
```
針對 Windows：  

```
1. aws rds modify-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}'
```

**Example**  
下列範例建立 MySQL 資料庫執行個體並將日誌檔案發佈至 CloudWatch Logs。`--enable-cloudwatch-logs-exports` 值為 JSON 字串陣列。字串可以是 `audit`、`error`、`general` 以及 `slowquery` 的任意組合。  
針對 Linux、macOS 或 Unix：  

```
1. aws rds create-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' \
4.     --db-instance-class db.m4.large \
5.     --engine MySQL
```
針對 Windows：  

```
1. aws rds create-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' ^
4.     --db-instance-class db.m4.large ^
5.     --engine MySQL
```

## RDS API
<a name="USER_LogAccess.MySQL.PublishtoCloudWatchLogs.API"></a>

您可以使用 RDS API 來發佈 MySQL 日誌。您可以使用下列參數來呼叫 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) 動作：
+ `DBInstanceIdentifier`
+ `CloudwatchLogsExportConfiguration`

**注意**  
`CloudwatchLogsExportConfiguration` 參數的變更一律立即套用到資料庫執行個體。因此，`ApplyImmediately` 參數沒有效果。

您也可以呼叫下列 RDS API 操作來發佈 MySQL 日誌：
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromS3.html)
+ [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html)

以下列參數來執行其中一個 RDS API 操作：
+ `DBInstanceIdentifier`
+ `EnableCloudwatchLogsExports`
+ `Engine`
+ `DBInstanceClass`

視您執行的 AWS CLI 命令而定，可能需要其他參數。

# 將 MySQL日誌輸出傳送至資料表
<a name="Appendix.MySQL.CommonDBATasks.Logs"></a>

您可以建立資料庫參數群組，並將 `log_output` 伺服器參數設為 `TABLE`，將一般與慢查詢日誌導向資料庫執行個體上的表格。一般查詢會記錄於 `mysql.general_log` 表格，而慢查詢會記錄至 `mysql.slow_log` 表格。您可以查詢表格來存取日誌資訊。啟用此日誌記錄會增加寫入至資料庫的資料總數量，可能造成效能降低。

一般日誌和慢查詢日誌根據預設將會停用。為啟用日誌記錄至表格，您也必須將 `general_log` 與 `slow_query_log` 伺服器參數設為 `1`。

日誌表格將持續擴增，直到重設適用參數為 `0` 時，各日誌記錄活動才會關閉。大量資料通常會隨時間累積，可能會佔用配得之儲存空間的大量比例。Amazon RDS Amazon RDS ​不允許截斷記錄資料表，但是您可以移動其中的內容。輪換表格可將其內容儲存至備份表格，然後建立新的空白日誌表格。您可以透過以下命令列程序來手動輪換日誌表格，命令提示由 `PROMPT>` 表示：

```
PROMPT> CALL mysql.rds_rotate_slow_log;
PROMPT> CALL mysql.rds_rotate_general_log;
```

為完全移除舊資料並重新取得磁碟空間，請連續呼叫兩次適用的程序。

# 為單一可用區資料庫設定 RDS for MySQL 二進位記錄
<a name="USER_LogAccess.MySQL.BinaryFormat"></a>

*二進位日誌*是一組日誌檔案，其中包含對 MySQL 伺服器執行個體所做資料修正的相關資訊。二進位日誌包含的資訊如下：
+ 描述資料庫變更的事件 (如建立資料表或修改資料列)
+ 有關更新了資料的每個陳述式持續時間的資訊
+ 本應更新資料但未更新的陳述式事件

二進位日誌會記錄複寫過程中傳送的陳述式。某些復原操作也需要這些日誌。如需詳細資訊，請參閱 MySQL 文件中的[二進位日誌](https://dev.mysql.com/doc/refman/8.0/en/binary-log.html)。

自動備份功能會決定 MySQL 開啟還是關閉二進位日誌記錄功能。您有下列選項：

開啟二進位日誌記錄功能  
將備份保留期設定為正的非零值。

關閉二進位日誌記錄功能  
將備份保留期間設定為 0。

如需詳細資訊，請參閱[啟用自動備份](USER_WorkingWithAutomatedBackups.Enabling.md)。

Amazon RDS 上的 MySQL 支援 *row-based* (列型)、*statement-based* (陳述式型)，和 *mixed* (混和式) 二進位記錄格式。除非需要特定的 binlog 格式，否則我們建議混合使用。如需各種 MySQL 二進位日誌格式的詳細資訊，請參閱 MySQL 說明文件中的[二進位記錄格式](https://dev.mysql.com/doc/refman/8.0/en/binary-log-formats.html)。

如果您打算使用複寫，二進位日誌記錄格式很重要，因為這決定資料變更的記錄，而此記錄會記錄在來源中並傳送到複寫目標。如需有關複寫時各種二進位日誌記錄格式的優缺點的資訊，請參閱 MySQL 文件中的[基於陳述式和基於列的複寫的優缺點](https://dev.mysql.com/doc/refman/8.0/en/replication-sbr-rbr.html)。

**重要**  
使用 MySQL 8.0.34 時，MySQL 已棄用 `binlog_format` 參數。在較新的 MySQL 版本中，MySQL 計劃移除參數，並僅支援資料列型複寫。因此，我們建議將資料列型記錄用於新的 MySQL 複寫設定。如需詳細資訊，請參閱 MySQL 文件中的 [binlog\$1format](https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_format)。  
MySQL 8.0 版和 8.4 版接受參數 `binlog_format`。使用此參數時，MySQL 會發出棄用警告。在未來的主要版本中，MySQL 會移除參數 `binlog_format`。  
基於陳述式的複寫可能會造成來源資料庫執行個體與僅供讀取複本不一致。如需詳細資訊，請參閱 MySQL 文件中的[二進位日誌記錄中安全和不安全陳述式的判定](https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html)。  
啟用二進位記錄會增加資料庫執行個體的寫入磁碟 I/O 操作次數。您可以使用 `WriteIOPS``` CloudWatch 指標來監控 IOPS 使用情況。

**設定 MySQL 二進位記錄格式**

1. 前往 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)，開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Parameter groups** (參數群組)。

1. 選擇您想要修改的與資料庫執行個體相關聯的資料庫參數群組。

   您無法修改預設參數群組。如果資料庫執行個體使用預設參數群組，請建立新的參數群組，並將它與資料庫執行個體建立關聯。

   如需參數群組的詳細資訊，請參閱[Amazon RDS 的參數群組](USER_WorkingWithParamGroups.md)。

1. 在**動作**中選擇**編輯**。

1. 將 `binlog_format` 參數設為您選擇的二進位日誌記錄格式 (`ROW`、`STATEMENT` 或 `MIXED`)。

   您可以將資料庫執行個體的備份保留期間設定為零來關閉二進位記錄，但這會停用每日自動備份。停用自動備份會關閉或停用 `log_bin` 工作階段變數。這會停用 RDS for MySQL 資料庫執行個體上的二進位記錄，進而在資料庫中將 `binlog_format` 工作階段變數重設為 `ROW` 的預設值。我們建議您不要停用備份。如需**備份保留期間**設定的詳細資訊，請參閱 [資料庫執行個體的設定](USER_ModifyInstance.Settings.md)。

1. 選擇 **Save changes (儲存變更)** 來儲存對資料庫參數群組的更新。

由於 `binlog_format` 參數在 RDS for MySQL 中是動態的，因此您不需要將資料庫執行個體重新開機即可套用變更。(請注意，在 Aurora MySQL 中，此參數是靜態的。如需詳細資訊，請參閱[設定 Aurora MySQL 二進位記錄](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.MySQL.BinaryFormat.html)。)

**重要**  
變更資料庫參數群組會影響使用該參數群組的所有資料庫執行個體。如果您想要為 AWS 區域中的不同 MySQL 資料庫執行個體指定不同的二進位記錄格式，則資料庫執行個體必須使用不同的資料庫參數群組。這些參數群組會識別不同的記錄格式。將適當的資料庫參數群組指派給每個資料庫執行個體。

# 為多可用區域資料庫叢集設定 MySQL 二進位記錄
<a name="USER_Binlog.MultiAZ"></a>

Amazon RDS for MySQL 多可用區域資料庫叢集中的二進位記錄會記錄所有資料庫變更，以支援複寫、時間點復原和稽核。在多可用區域資料庫叢集中，二進位日誌會同步次要節點與主節點，確保可用區域之間的資料一致性，並啟用無縫容錯移轉。

為了最佳化二進位記錄，Amazon RDS 支援二進位日誌交易壓縮，可減少二進位日誌的儲存要求並改善複寫效率。

**Topics**
+ [多可用區域資料庫叢集的二進位日誌交易壓縮](#USER_Binlog.MultiAZ.compression)
+ [設定多可用區域資料庫叢集的二進位日誌交易壓縮](#USER_Binlog.MultiAZ.configuring)

## 多可用區域資料庫叢集的二進位日誌交易壓縮
<a name="USER_Binlog.MultiAZ.compression"></a>

二進位日誌交易壓縮使用 zstd 演算法來減少二進位日誌中存放的交易資料大小。啟用時，MySQL 資料庫引擎會將交易承載壓縮為單一事件，將 I/O 和儲存額外負荷降至最低。此功能可改善資料庫效能、減少二進位日誌大小，並最佳化在多可用區域資料庫叢集中管理和複寫日誌的資源使用。

Amazon RDS 透過下列參數為 RDS for MySQL 多可用區域資料庫叢集提供二進位日誌交易壓縮：
+ `binlog_transaction_compression` – 啟用時 (`1`)，資料庫引擎會壓縮交易承載，並將其做為單一事件寫入二進位日誌。這可減少儲存用量和 I/O 額外負荷。參數預設為停用。
+ `binlog_transaction_compression_level_zstd` – 設定二進位日誌交易的 zstd 壓縮層級。較高的值會增加壓縮比率，進一步減少儲存要求，但增加壓縮的 CPU 和記憶體用量。預設值為 3，範圍為 1-22。

這些參數可讓您根據工作負載特性和資源可用性微調二進位日誌壓縮。如需詳細資訊，請參閱 MySQL 文件中的[二進位日誌交易壓縮](https://dev.mysql.com/doc/refman/8.4/en/binary-log-transaction-compression.html)。

二進位日誌交易壓縮具有下列主要優點：
+ 壓縮會減少二進位日誌的大小，特別是對於具有大型交易或大量寫入的工作負載。
+ 較小的二進位日誌可減少網路和 I/O 額外負荷，增強複寫效能。
+ `binlog_transaction_compression_level_zstd` 參數提供壓縮比率與資源耗用量之間的權衡控制。

## 設定多可用區域資料庫叢集的二進位日誌交易壓縮
<a name="USER_Binlog.MultiAZ.configuring"></a>

若要設定 RDS for MySQL 多可用區域資料庫叢集的二進位日誌交易壓縮，請修改相關的叢集參數設定，以符合您的工作負載要求。

### 主控台
<a name="USER_Binlog.MultiAZ.configuring-console"></a>

**啟用二進位日誌交易壓縮**

1. 修改資料庫叢集參數群組，將 `binlog_transaction_compression` 參數設定為 `1`。

1. (選用) 根據您的工作負載要求和資源可用性調整 `binlog_transaction_compression_level_zstd` 參數的值。

如需詳細資訊，請參閱[在 中修改資料庫叢集參數群組中的參數](USER_WorkingWithParamGroups.ModifyingCluster.md)。

### AWS CLI
<a name="USER_Binlog.MultiAZ.configuring-cli"></a>

若要使用 設定二進位日誌交易壓縮 AWS CLI，請使用 [modify-db-cluster-parameter-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster-parameter-group.html) 命令。

**Example**  
針對 Linux、macOS 或 Unix：  

```
aws rds modify-db-cluster-parameter-group \
  --db-cluster-parameter-group-name your-cluster-parameter-group \
  --parameters "ParameterName=binlog_transaction_compression,ParameterValue=1,ApplyMethod=pending-reboot"
```
在 Windows 中：  

```
aws rds modify-db-cluster-parameter-group ^
  --db-cluster-parameter-group-name your-cluster-parameter-group ^
  --parameters "ParameterName=binlog_transaction_compression,ParameterValue=1,ApplyMethod=pending-reboot"
```

### RDS API
<a name="USER_Binlog.MultiAZ.configuring-api"></a>

若要使用 Amazon RDS API 設定二進位日誌交易壓縮，請使用 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBClusterParameterGroup.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBClusterParameterGroup.html) 操作。

# 存取 MySQL 二進位日誌
<a name="USER_LogAccess.MySQL.Binarylog"></a>

您可使用 mysqlbinlog 公用程式，從 RDS for MySQL 資料庫執行個體下載或串流二進位日誌。二進位日誌會下載至您的本機電腦，您可於此執行動作，例如使用 mysql 公用程式來重新執行日誌。如需使用 mysqlbinlog 公用程式的詳細資訊，請參閱 MySQL 文件中的[使用 mysqlbinlog 備份二進位日誌檔案](https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog-backup.html)。

若要在 Amazon RDS 執行個體上執行 mysqlbinlog 公用程式，請使用下列選項：
+ `--read-from-remote-server` - 必要。
+ `--host` – 來自執行個體端點的 DNS 名稱。
+ `--port` – 執行個體使用的連接埠。
+ `--user` – 已授予 `REPLICATION SLAVE` 許可的 MySQL 使用者。
+ `--password` – MySQL 使用者的密碼，或者省略密碼值，讓公用程式提示您密碼。
+ `--raw` – 以二進位格式下載檔案。
+ `--result-file` – 接收列輸出的本機檔案。
+ `--stop-never` – 串流二進位日誌檔。
+ `--verbose` – 當您使用 `ROW` binlog 格式時，請加入此選項，將資料列事件視為虛擬 SQL 陳述式。如需 `--verbose` 選項的詳細資訊，請參閱 MySQL 文件中的 [mysqlbinlog row event display](https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog-row-events.html)。
+ 指定一個或一個以上的二進位日誌檔案名稱。若要取得可用日誌清單，請使用 SQL 命令 `SHOW BINARY LOGS`。

如需 mysqlbinlog 選項的詳細資訊，請參閱 MySQL 文件中的 [mysqlbinlog — 處理二進位日誌檔案的公用程式](https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog.html)。

下列範例顯示如何使用 mysqlbinlog 公用程式。

針對 Linux、macOS 或 Unix：

```
mysqlbinlog \
    --read-from-remote-server \
    --host=MySQLInstance1.cg034hpkmmjt.region.rds.amazonaws.com \
    --port=3306  \
    --user ReplUser \
    --password \
    --raw \
    --verbose \
    --result-file=/tmp/ \
    binlog.00098
```

針對 Windows：

```
mysqlbinlog ^
    --read-from-remote-server ^
    --host=MySQLInstance1.cg034hpkmmjt.region.rds.amazonaws.com ^
    --port=3306  ^
    --user ReplUser ^
    --password ^
    --raw ^
    --verbose ^
    --result-file=/tmp/ ^
    binlog.00098
```

二進位日誌必須在資料庫執行個體上保持可用，mysqlbinlog 公用程式才能存取它們。若要確保其可用性，請使用 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 預存程序，並指定有足夠時間供您下載日誌的期間。如果未設定此組態，Amazon RDS 會盡快清除二進位日誌，導致 mysqlbinlog 公用程式擷取的二進位日誌出現差距。

下列範例將保留期間設定為 1 天。

```
call mysql.rds_set_configuration('binlog retention hours', 24);
```

若要顯示目前設定，請使用 [mysql.rds\$1show\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_show_configuration) 預存程序。

```
call mysql.rds_show_configuration;
```