

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

# MySQL memcached 支援
<a name="Appendix.MySQL.Options.memcached"></a>

Amazon RDS 支援透過 `memcached` 界面，藉此使用 MySQL 5.6 所推出的 InnoDB 資料表。藉由 `memcached` API，應用程式即可以類似 NoSQL 索引鍵/值資料儲存的方式，使用 InnoDB 資料表。

**注意**  
MySQL 8.4 不再提供 memcached 介面。當您將資料庫執行個體升級至 MySQL 8.4 時，您必須在現有的選項群組中停用 `memcached`。

`memcached` 界面是簡單的索引鍵型快取。應用程式使用 `memcached` 來插入、操控及擷取快取的索引鍵-值資料對。MySQL 5.6 引進一個實作協助程式服務的外掛程式，該服務透過 `memcached` 通訊協定公開 InnoDB 資料表中的資料。如需有關 MySQL `memcached` 外掛程式的詳細資訊，請參閱 [InnoDB 與 Memcached 的整合](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached.html)。

**如要啟用 RDS for MySQL 資料庫執行個體的 memcached 支援**

1. 決定要用於控制 `memcached` 界面存取的安全群組。如果已經在使用此 SQL 界面的應用程式和將會存取 `memcached` 界面的應用程式是同一批，您可以使用此 SQL 界面使用的現有 VPC 安全群組。如果是不同的應用程式將存取 `memcached` 界面，請定義新的 VPC 或資料庫安全群組。如需管理安全群組的詳細資訊，請參閱 [使用安全群組控制存取](Overview.RDSSecurityGroups.md) 

1. 請建立自訂資料庫選項群組，選取 MySQL 做為引擎類型和版本。如需建立選項群組的相關資訊，請參閱[建立選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

1. 將 `MEMCACHED` 選項新增至選項群組。指定 `memcached` 界面將使用的連接埠，以及指定安全群組來控制對界面的存取。如需新增選項的詳細資訊，請參閱[將選項新增至選項群組](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。

1. 如有需要，修改選項設定以便設定 `memcached` 參數。如需如何修改選項設定的詳細資訊，請參閱[修改選項設定](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。

1. 將選項群組套用至執行個體。一旦套用選項群組，Amazon RDS 即會啟用該執行個體的 `memcached` 支援。
   + 當您在啟動新執行個體時指定自訂選項群組，即啟用了新執行個體的 `memcached` 支援。如需有關啟動 MySQL 執行個體的詳細資訊，請參閱[建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。
   + 當您在修改現有執行個體時指定自訂選項群組，即啟用了現有執行個體的 `memcached` 支援。如需修改 資料庫執行個體的詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

1. 指定可以透過 `memcached` 界面存取 MySQL 資料表中的哪幾欄。`memcached` 外掛程式會在名為 `containers` 的專用資料庫中建立名為 `innodb_memcache` 的目錄資料表。您在 `containers` 資料表中插入一個資料列，以映射透過 `memcached` 存取的 InnoDB 資料表。指定 InnoDB 資料表中的一欄用於存放 `memcached` 索引鍵值，並指定一或多欄用於存放與此索引鍵相關聯的資料值。也要指定名稱，讓 `memcached` 應用程式可用來指向這幾欄。如需在 `containers` 資料表中插入資料列的詳細資訊，請參閱 [InnoDB Memcached 外掛程式內部](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-internals.html)。如需映射 InnoDB 資料表以及透過 `memcached` 存取它的範例，請參閱[撰寫 InnoDB Memcached 外掛程式的應用程式](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-developing.html)。

1. 如果存取 `memcached` 界面的應用程式所在的電腦或 EC2 執行個體，和使用 SQL 界面的應用程式所在的不同，請為這些電腦新增連線資訊，以連線至與 MySQL 執行個體關聯的 VPC 安全群組。如需管理安全群組的詳細資訊，請參閱 [使用安全群組控制存取](Overview.RDSSecurityGroups.md)。

修改執行個體並指定您的 MySQL 版本的預設選項群組，即可關閉執行個體的 `memcached` 支援。如需修改 資料庫執行個體的詳細資訊，請參閱[修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md)。

## MySQL memcached 安全考量
<a name="w2aac47c83c15c13"></a>

`memcached` 通訊協定不支援使用者驗證。如需 MySQL `memcached` 安全性考量的詳細資訊，請參閱 MySQL 文件中的 [InnoDB Memcached 外掛程式的安全性考量](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-security.html)。

您可採取以下動作幫助增加 `memcached` 界面的安全：
+ 在將 `MEMCACHED` 選項新增至選項群組時，指定非預設 (11211) 的連接埠。
+ 確保您將 `memcached` 界面與 VPC 安全群組 (會限制對已知信任用戶端地址或 EC2 執行個體的存取) 相關聯。如需管理安全群組的詳細資訊，請參閱 [使用安全群組控制存取](Overview.RDSSecurityGroups.md)。

## MySQL memcached 連線資訊
<a name="w2aac47c83c15c15"></a>

應用程式必須同時指定 Amazon RDS 執行個體的 DNS 名稱與 `memcached` 連接埠號碼，才能存取 `memcached` 界面。例如，如果執行個體的 DNS 名稱是 `my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com`，且 memcached 界面使用 11212 連接埠，則在 PHP 中指定的連線資訊就是：

 

```
1. <?php
2. 
3. $cache = new Memcache;
4. $cache->connect('my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com',11212);
5. ?>
```

**尋找 MySQL 資料庫執行個體的 DNS 名稱及 Memcached 連接埠**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在 的右上角 AWS 管理主控台，選取包含資料庫執行個體的區域。

1. 在導覽窗格中，選擇 **Databases** (資料庫)。

1. 選擇 MySQL 資料庫執行個體名稱以顯示其詳細資訊。

1. 請注意 **Connect (連線)** 區段中 **Endpoint (端點)** 欄位的值。DNS 名稱與端點名稱相同。此外，請注意 **Connect (連線)** 區段中的連接埠不是用於存取 `memcached` 界面。

1. 在 **Details (詳細資訊)** 區段中，注意 **Option Group (選項群組)** 欄位中列出的名稱。

1. 在導覽窗格中，選擇 **Option groups** (選項群組)。

1. 選擇 MySQL 資料庫執行個體使用的選項群組名稱，以顯示選項群組的詳細資訊。在 **Options (選項)** 區段中，請注意 **MEMCACHED** 選項的 **Port (連接埠)** 設定值。

## MySQL memcached 選項設定
<a name="w2aac47c83c15c17"></a>

Amazon RDS 會公開 MySQL `memcached` 參數，並將其做為 Amazon RDS `MEMCACHED` 選項中的選項設定。

### MySQL memcached 參數
<a name="w2aac47c83c15c17b4"></a>
+  `DAEMON_MEMCACHED_R_BATCH_SIZE` – 整數，指定要執行多少個 `memcached` 讀取操作 (get) 之後才 COMMIT (遞交) 開始新交易。允許的值為 1 到 4294967295；預設值是 1。此選項要在執行個體重新啟動後才會生效。
+  `DAEMON_MEMCACHED_W_BATCH_SIZE` – 整數，指定要執行多少個 `memcached` 寫入操作 (例如 add、set 或 incr) 之後才 COMMIT (遞交) 開始新交易。允許的值為 1 到 4294967295；預設值是 1。此選項要在執行個體重新啟動後才會生效。
+  `INNODB_API_BK_COMMIT_INTERVAL` – 整數，指定自動遞交使用 InnoDB `memcached` 界面的閒置連線的遞交頻率。允許的值為 1 到 1073741824；預設值是 5。此選項會立即生效，不需要重新啟動執行個體。
+  `INNODB_API_DISABLE_ROWLOCK` – 布林值，用於停用 (1 (true)) 或啟用 (0 (false)) 使用 InnoDB `memcached` 界面時的資料列鎖定。預設值為 0 (false)。此選項要在執行個體重新啟動後才會生效。
+  `INNODB_API_ENABLE_MDL` – 布林值，設為 0 (false) 可鎖定 InnoDB `memcached` 外掛程式所使用的資料表，使您無法透過 SQL 界面刪除資料表或以 DDL 更改資料表。預設值為 0 (false)。此選項要在執行個體重新啟動後才會生效。
+  `INNODB_API_TRX_LEVEL` – 整數，指定 `memcached` 界面處理的查詢的交易隔離層級。允許的值為 0 到 3。預設為 0。此選項要在執行個體重新啟動後才會生效。

Amazon RDS 會設定這些 MySQL `memcached` 參數，並且無法修改以下項目：`DAEMON_MEMCACHED_LIB_NAME`、`DAEMON_MEMCACHED_LIB_PATH` 與 `INNODB_API_ENABLE_BINLOG`。MySQL 管理員使用 `daemon_memcached_options` 所設定的參數，在 Amazon RDS 中皆為個別的 `MEMCACHED` 選項設定。

### MySQL daemon\$1memcached\$1options 參數
<a name="w2aac47c83c15c17b6"></a>
+  `BINDING_PROTOCOL` – 字串，指定要使用的繫結通訊協定。允許的值為 `auto`、`ascii` 或 `binary`。預設值是 `auto`，表示伺服器會自動與用戶端交涉通訊協定。此選項要在執行個體重新啟動後才會生效。
+  `BACKLOG_QUEUE_LIMIT` – 整數，指定可以有幾個等待 處理的網路連線。`memcached`增加此限制可能會減少無法連線到 `memcached` 執行個體的用戶端收到的錯誤，但不會提高伺服器的效能。允許的值為 1 到 2048；預設值是 1024。此選項要在執行個體重新啟動後才會生效。
+  `CAS_DISABLED` – 布林值，可啟用 (1 (true)) 或停用 (0 (false)) 比較與交換 (CAS)，CAS 可將每個項目的大小減少 8 個位元組。預設值為 0 (false)。此選項要在執行個體重新啟動後才會生效。
+  `CHUNK_SIZE` – 整數，指定可為最小項目的金鑰、值、標記配置的區塊大小下限 (位元組)。允許的值為 1 到 48。預設值為 48，使用較小的值可大幅增進記憶體效能。此選項要在執行個體重新啟動後才會生效。
+  `CHUNK_SIZE_GROWTH_FACTOR` – 浮動數值，控制新區塊的大小。新區塊的大小是先前區塊大小乘以 `CHUNK_SIZE_GROWTH_FACTOR`。允許的值為 1 到 2；預設值是 1.25。此選項要在執行個體重新啟動後才會生效。
+  `ERROR_ON_MEMORY_EXHAUSTED` – 布林值，設為 1 (true) 即指定在已經沒有記憶體可儲存項目時，`memcached` 要傳回錯誤而不是移出項目。如果設為 0 (false)，`memcached` 會在沒有記憶體時移出項目。預設值為 0 (false)。此選項要在執行個體重新啟動後才會生效。
+  `MAX_SIMULTANEOUS_CONNECTIONS` – 整數，指定並行連線的數量上限。設為小於 10 的值可阻止 MySQL 啟動。允許的值為 10 到 1024；預設值是 1024。此選項要在執行個體重新啟動後才會生效。
+  `VERBOSITY` – 字串，指定 `memcached` 服務在 MySQL 錯誤日誌中記錄的資訊層級。預設值為 v。此選項要在執行個體重新啟動後才會生效。允許的值為：
  +  `v` – 在執行主要事件迴圈時，記錄錯誤並發出警告。
  +  `vv` – 除了 v 記錄的資訊之外，也記錄每個用戶端命令和回應。
  +  `vvv` – 除了 w 記錄的資訊之外，也記錄內部狀態轉換。

Amazon RDS 會自行設定以下不可修改的 MySQL `DAEMON_MEMCACHED_OPTIONS` 參數：`DAEMON_PROCESS`、`LARGE_MEMORY_PAGES`、`MAXIMUM_CORE_FILE_LIMIT`、`MAX_ITEM_SIZE`、`LOCK_DOWN_PAGE_MEMORY`、`MASK`、`IDFILE`、`REQUESTS_PER_EVENT`、`SOCKET` 與 `USER`。