

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

# 使用資料庫執行個體僅供讀取複本
<a name="USER_ReadRepl"></a>

僅供讀取複本是資料庫執行個體的唯讀副本。您可以將查詢從應用程式路由到僅供讀取複本，以減少主要資料庫執行個體的負載。如此一來，您可以彈性地擴展超越單一資料庫執行個體的容量限制，以處理高讀取量的資料庫工作負載。

若要從來源資料庫執行個體建立僅供讀取複本，Amazon RDS 會使用資料庫引擎的內建複寫功能。如需搭配特定引擎使用僅供讀取複本的資訊，請參閱下列各節：
+ [使用適用於 Amazon RDS for Db2 的複本](db2-replication.md)
+ [使用 MariaDB 僅供讀取複本](USER_MariaDB.Replication.ReadReplicas.md)
+ [使用 Amazon RDS 中的 Microsoft SQL Server 的僅供讀取複本](SQLServer.ReadReplicas.md)
+ [使用 MySQL 僅供讀取複本](USER_MySQL.Replication.ReadReplicas.md)
+ [使用適用於 Amazon RDS for Oracel 的僅供讀取複本](oracle-read-replicas.md)
+ [使用 Amazon RDS for PostgreSQL 的僅供讀取複本](USER_PostgreSQL.Replication.ReadReplicas.md)

在您從來源資料庫執行個體建立僅供讀取複本之後，來源會成為主要資料庫執行個體。當您對主要資料庫執行個體進行更新時，Amazon RDS 會以非同步方式將它們複製到僅供讀取複本。下圖顯示複寫到不同可用區域 (AZ) 中僅供讀取複本的來源資料庫執行個體。用戶端對主要資料庫執行個體具有讀取/寫入存取權，以及對複本具有唯讀存取權。

![\[僅供讀取複本組態\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/read-replica.png)


僅供讀取複本會以標準資料庫執行個體計費，費率與用於複本的資料庫執行個體類別相同。在相同 AWS 區域內的來源資料庫執行個體與僅供讀取複本之間複寫資料時，不會向您收取資料傳輸費用。如需詳細資訊，請參閱[跨區域複寫成本](USER_ReadRepl.XRgn.md#USER_ReadRepl.XRgn.Costs)及[Amazon RDS 資料庫執行個體計費 ](User_DBInstanceBilling.md)。

**Topics**
+ [Amazon RDS 僅供讀取複本的概觀](#USER_ReadRepl.Overview)
+ [資料庫引擎的僅供讀取複本之間的差異](USER_ReadRepl.Overview.Differences.md)
+ [建立僅供讀取複本](USER_ReadRepl.Create.md)
+ [提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md)
+ [監控僅供讀取複本](USER_ReadRepl.Monitoring.md)
+ [在不同的 中建立僅供讀取複本 AWS 區域](USER_ReadRepl.XRgn.md)

## Amazon RDS 僅供讀取複本的概觀
<a name="USER_ReadRepl.Overview"></a>

下列各節討論資料庫*執行個體*僅供讀取複本。如需多可用區域資料庫*叢集*僅供讀取複本的詳細資訊，請參閱 [對 Amazon RDS 使用多可用區域資料庫叢集僅供讀取複本](USER_MultiAZDBCluster_ReadRepl.md)。

**Topics**
+ [僅供讀取複本的使用案例](#USER_ReadRepl.Overview.use-cases)
+ [僅供讀取複本的運作方式](#USER_ReadRepl.Overview.how-it-works)
+ [多可用區域部署中的僅供讀取複本](#USER_ReadRepl.Overview.maz-replicas)
+ [跨區域僅供讀取複本](#USER_ReadRepl.Overview.xregion-replicas)
+ [僅供讀取複本儲存類型](#USER_ReadRepl.Overview.replica-storage)
+ [從複本建立複本的限制](#USER_ReadRepl.Overview.circular-replication)
+ [刪除複本時的考量](#USER_ReadRepl.Overview.deletion-considerations)

### 僅供讀取複本的使用案例
<a name="USER_ReadRepl.Overview.use-cases"></a>

為指定的來源資料庫執行個體部署一或多個僅供讀取複本，在各種鏈中可能都有意義，包括：
+ 擴展超越單一資料庫執行個體的運算或 I/O 容量，以處理高讀取量的資料庫工作負載。您可以將此多餘讀取流量指向到一或多個僅供讀取複本。
+ 在來源資料庫執行個體不可用時，為讀取流量提供服務。在某些情況下，如果您的來源資料庫執行個體無法處理 I/O 請求 (例如，由於備份或計劃維護而暫停 I/O)。在這些情況下，您可以將讀取流量導向到您的僅供讀取複本。請注意，在這種使用案例中，因為來源資料庫執行個體不可用，僅供讀取複本中的資料可能為「過時」狀態。
+ 商業報告或資料倉儲案例，您可能希望針對僅供讀取複本執行商業報告查詢，而非針對生產資料庫執行個體。
+ 實作災難復原。您可以在主要資料庫執行個體失敗時，提升僅供讀取複本為獨立的執行個體，以做為災難復原解決方案。

### 僅供讀取複本的運作方式
<a name="USER_ReadRepl.Overview.how-it-works"></a>

建立僅供讀取複本時，請將現有資料庫執行個體指定為來源。然後 Amazon RDS 會取得來源執行個體的快照，並從該快照建立唯讀執行個體。Amazon RDS 會使用非同步複寫方法，以供資料庫引擎更新僅供讀取複本，而不論主要資料庫執行個體是否有變更。

僅供讀取複本做為資料庫執行個體運作，並允許唯讀連接。例外是 RDS for Db2 和 RDS for Oracle 資料庫引擎，兩者分別支援待命模式和掛載模式的複本資料庫。待命複本和掛載複本不接受使用者連線，因此無法處理唯讀工作負載。待命複本和掛載複本的主要用途是跨區域災難復原。如需詳細資訊，請參閱[使用適用於 Amazon RDS for Db2 的複本](db2-replication.md)及[使用適用於 Amazon RDS for Oracel 的僅供讀取複本](oracle-read-replicas.md)。

應用程式會連線至僅供讀取複本，如同它們對任何資料庫執行個體所做一般。Amazon RDS 會複寫來源資料庫執行個體中的所有資料庫。

您必須手動建立僅供讀取複本。RDS 不支援自動調整僅供讀取複本，這是隨著讀取需求變更而自動新增或移除僅供讀取複本的功能。

### 多可用區域部署中的僅供讀取複本
<a name="USER_ReadRepl.Overview.maz-replicas"></a>

您可以在多可用區域部署中，為資料庫執行個體設定僅供讀取複本，該執行個體還具有設定為高可用性的待命複本。使用待命複本進行複寫是同步的。與僅供讀取複本不同，待命複本無法提供讀取流量。

在下列案例中，用戶端對某個 AZ 中的主要資料庫執行個體具有讀取/寫入存取權。主要執行個體會以非同步方式將更新複製到第二個 AZ 中的僅供讀取複本，並以同步方式將它們複製到第三個 AZ 中的待命複本。用戶端對僅供讀取複本只有讀取存取權。

![\[僅供讀取複本和待命複本組態\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/read-and-standby-replica.png)


如需高可用性和待命複本的相關資訊，請參閱[設定及管理 Amazon RDS 的多可用區域部署](Concepts.MultiAZ.md)。

### 跨區域僅供讀取複本
<a name="USER_ReadRepl.Overview.xregion-replicas"></a>

在某些情況下，僅供讀取複本位於 AWS 區域 與其主要資料庫執行個體不同的 中。在這些情況下，Amazon RDS 會在主要資料庫執行個體與僅供讀取複本之間設定安全通訊管道。Amazon RDS 會建立啟用安全頻道所需的任何 AWS 安全組態，例如新增安全群組項目。如需跨區域僅供讀取複本的相關資訊，請參閱[在不同的 中建立僅供讀取複本 AWS 區域](USER_ReadRepl.XRgn.md)。

本章中的資訊適用於在 AWS 區域 與來源資料庫執行個體相同的 或單獨的 中建立 Amazon RDS 僅供讀取複本 AWS 區域。以下資訊並不適用於在 Amazon EC2 執行個體上執行的執行個體，或內部部署的執行個體上設定複寫。

### 僅供讀取複本儲存類型
<a name="USER_ReadRepl.Overview.replica-storage"></a>

根據預設，僅供讀取複本建立時使用與來源資料庫執行個體相同的儲存類型。但您仍可以依照下表中的選項建立使用與來源資料庫執行個體不同儲存類型的僅供讀取複本。

<a name="rds-read-replica-storage-reference"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/USER_ReadRepl.html)

**注意**  
當您提升僅供讀取複本的配置儲存空間時，其至少必須提升 10%。如果您嘗試以低於 10% 的值增加該值，便會發生錯誤。

### 從複本建立複本的限制
<a name="USER_ReadRepl.Overview.circular-replication"></a>

Amazon RDS 不支援循環複寫。您不能將資料庫執行個體設定為現有資料庫執行個體的複寫來源。您只能從現有的資料庫執行個體建立新的僅供讀取複本。例如，如果 **MySourceDBInstance** 建立複本到 **ReadReplica1**，您不能將 **ReadReplica1** 設定為向 **MySourceDBInstance** 建立複本。

對於 MRDS for MariaDB 和 RDS for MySQL，以及對於 RDS for PostgreSQL 的某些版本，您可從現有僅供讀取複本建立僅供讀取複本。例如，您可以從現有複本 **ReadReplica1** 建立新的僅供讀取複本 **ReadReplica2**。對於 RDS for Db2、RDS for Oracle 和 RDS for SQL Server，您無法從現有的僅供讀取複本建立僅供讀取複本。

### 刪除複本時的考量
<a name="USER_ReadRepl.Overview.deletion-considerations"></a>

RDS 不支援自動調整僅供讀取複本。因此，RDS 不會在需求增加時增加複本數量，也不會在需求減少時減少複本數量。如果您不再需要僅供讀取複本，請使用刪除資料庫執行個體的相同機制手動將其刪除。如果您刪除來源資料庫執行個體而不刪除其相同 中的僅供讀取複本 AWS 區域，則每個複本都會提升為獨立的資料庫執行個體。

如需刪除資料庫執行個體的相關資訊，請參閱[刪除資料庫執行個體](USER_DeleteInstance.md)。如需僅供讀取複本提升的相關資訊，請參閱[提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md)。如需刪除跨區域僅供讀取複本的來源資料庫執行個體的相關資訊，請參閱 [跨區域複寫考量](USER_ReadRepl.XRgn.md#USER_ReadRepl.XRgn.Cnsdr)。

# 資料庫引擎的僅供讀取複本之間的差異
<a name="USER_ReadRepl.Overview.Differences"></a>

由於 Amazon RDS 資料庫引擎實作複寫的方式不同，有幾項重大差異您應該要知道。

## Db2
<a name="USER_ReadRepl.Overview.Differences.Db2"></a>

RDS for Db2 的複本具有下列功能和行為：
+ **複寫方法** – 實體複寫。
+ **交易日誌清除** – 符合下列條件時，RDS for Db2 會從主要資料庫執行個體中清除日誌：
  + 日誌至少已存留兩小時。
  + 已超過封存日誌保留時數設定。
  + RDS for Db2 已成功將日誌複寫到所有複本資料庫執行個體。

  這同時適用於相同的 AWS 區域 資料庫執行個體和跨區域資料庫執行個體。如需設定封存記錄保留時數的相關資訊，請參閱[rdsadmin.set\$1archive\$1log\$1retention](db2-sp-managing-databases.md#db2-sp-set-archive-log-retention)。
+ **可寫入複本** – Db2 複本是實體複本，Db2 不允許在複本中寫入。您可提升複本，使其變成可寫入。提升的複本具有提升要求提出前的複寫資料。
+ **備份** – RDS for Db2 複本上支援自動備份和手動快照。
+ **平行複寫** – 封存日誌資料一律會從主要資料庫平行傳輸至其所有複本。
+ **待命狀態** – 待命複本的主要用途是跨區域災難復原。如需相關資訊，請參閱[使用適用於 Amazon RDS for Db2 的複本](db2-replication.md)。

## MariaDB 及 MySQL
<a name="USER_ReadRepl.Overview.Differences.MariaDBMySQL"></a>

RDS for MariaDB 和 RDS for MySQL 的僅供讀取複本具有下列功能和行為：
+ **複寫方法** – 邏輯複寫。
+ **交易日誌清除** – RDS for MariaDB 和 RDS for MySQL 會保留任何未套用的二進位日誌。
+ **可寫入複本** – 您可將 MariaDB 或 MySQL 僅供讀取複本變成可寫入的。
+ **備份** – RDS for MariaDB 或 RDS for MySQL 僅供讀取複本上支援自動備份和手動快照。
+ **平行複寫** – 所有支援的 MariaDB 和 MySQL 版本皆允許平行複寫執行緒。
+ **掛載狀態** – 不支援。

## Oracle
<a name="USER_ReadRepl.Overview.Differences.Oracle"></a>

RDS for Oracle 的僅供讀取複本具有下列功能和行為：
+ **複寫方法** – 實體複寫。
+ **交易日誌清除** – 如果主要資料庫執行個體沒有跨區域僅供讀取複本，Amazon RDS for Oracle 在來源資料庫執行個體上會保留至少兩小時的交易日誌。兩小時之後，或過了存檔日誌保留時數設定後 (視何者較長而定)，將從來源資料庫執行個體中清除日誌。只有在日誌已成功套用至資料庫後，才會在過了存檔日誌保留時數設定之後從僅供讀取複本中清除日誌。

  在某些情況下，一個主要資料庫執行個體可能有一或多個跨區域僅供讀取複本。如果是這樣，Amazon RDS for Oracle 會將交易日誌保留在來源資料庫執行個體上，直到傳輸並套用至所有跨區域僅供讀取複本為止。

  如需設定封存記錄保留時數的相關資訊，請參閱[保留封存的重做日誌](Appendix.Oracle.CommonDBATasks.RetainRedoLogs.md)。
+ **可寫入複本** – Oracle 僅供讀取複本是實體複本，且 Oracle 不允許在僅供讀取複本中進行寫入。您可提升僅供讀取複本以將其變為可寫入。提升的僅供讀取複本具有提升要求提出前的複寫資料。
+ **備份** – RDS for Oracle 僅供讀取複本上支援自動備份和手動快照。
+ **平行複寫** – 重做日誌資料一律會從主要資料庫平行傳輸至其所有的僅供讀取複本。
+ **掛載狀態** – 掛載複本的主要用途是跨區域災難復原。掛載複本不需要 Active Data Guard 授權。如需詳細資訊，請參閱[使用適用於 Amazon RDS for Oracel 的僅供讀取複本](oracle-read-replicas.md)。

## PostgreSQL
<a name="USER_ReadRepl.Overview.Differences.PostgreSQL"></a>

RDS for PostgreSQL 的僅供讀取複本具有下列功能和行為：
+ **複寫方法** – 實體複寫。
+ **交易日至清除** – PostgreSQL 會以參數 `wal_keep_segments` 指出保留了多少個預先寫入日誌 (WAL) 檔案以提供資料給僅供讀取複本。參數值指定了要保留的日誌數量。
+ **可寫入複本** – PostgreSQL 僅供讀取複本為實體複本，且 PostgreSQL 不允許將僅供讀取複本變成可寫入。
+ **備份** – RDS for PostgreSQL 僅供讀取複本支援手動快照。RDS for PostgreSQL 14.1 和更高版本僅支援僅供讀取複本的自動備份。您無法為早於 14.1 的 RDS for PostgreSQL 版本開啟 PostgreSQL 僅供讀取複本的自動備份。對於 RDS for PostgreSQL 13 及更早版本，若您想要備份僅供讀取複本，則請從僅供讀取複本建立快照。
+ **平行複寫** – PostgreSQL 使用單一程序來處理複寫。
+ **掛載狀態** – 不支援。

## SQL Server
<a name="USER_ReadRepl.Overview.Differences.SQLServer"></a>

RDS for SQL Server 的僅供讀取複本具有下列功能和行為：
+ **複寫方法** – 實體複寫。
+ **交易日誌清除** – 次要複本不再需要時，可以截斷主要複本上交易日誌檔的虛擬日誌檔 (VLF)。

  在複本中強化記錄檔記錄時，只能將 VLF 標示為非作用中。無論主要複本中的磁碟子系統有多快，交易記錄檔都會保留 VLF，直到速度最慢的複本強化它為止。
+ **可寫入複本** – SQL Server 僅供讀取複本是實體複本，也不允許寫入。您可提升僅供讀取複本以將其變為可寫入。提升的僅供讀取副本會將複製的資料置於提升請求提出的時機。
+ **備份** – RDS for SQL Server 僅供讀取複本上不支援自動備份和手動快照。
+ **平行複寫** – 重做日誌資料一律會從主要資料庫平行傳輸至其所有的僅供讀取複本。
+ **掛載狀態** – 不支援。

# 建立僅供讀取複本
<a name="USER_ReadRepl.Create"></a>

您可以使用 AWS 管理主控台 AWS CLI或 RDS API 從現有的資料庫執行個體建立僅供讀取複本。若要建立僅供讀取複本，需指定 `SourceDBInstanceIdentifier`，也就是您想要複製之來源資料庫執行個體的資料庫執行個體識別符。

建立僅供讀取複本時，Amazon RDS 會對來源資料庫執行個體建立資料庫快照，接著開始複寫。資料庫快照操作開始時，來源資料庫執行個體會經歷非常短暫的 I/O 暫停。I/O 暫停通常持續約一秒。假如來源資料庫執行個體為多可用區域部署，則可避免 I/O 暫停，因為此時快照是從次要資料庫執行個體建立。

長時間執行的作用中交易會使建立僅供讀取複本的流程變慢。建議您等到長時間執行交易完成後，再建立僅供讀取複本。如果從同一個來源資料庫執行個體平行建立多個僅供讀取複本，Amazon RDS 只會在一開始的建立動作時擷取一個快照。

建立僅供讀取複本時有一些問題需要考慮。首先，務必要將備份保留期設定為 0 以外的值，才能啟用來源資料庫執行個體的自動備份。若僅供讀取複本能讓其他僅供讀取複本做為來源資料庫執行個體，則亦適用此要求。如要啟用 RDS for MySQL 僅供讀取複本的自動備份，首先請先建立該僅供讀取複本，然後修改該複本以啟用自動備份。

**注意**  
在 中 AWS 區域，強烈建議您在與來源資料庫執行個體相同的虛擬私有雲端 (VPC) 中建立所有僅供讀取複本。如果您在與來源資料庫執行個體不同的 VPC 中建立僅供讀取複本，則複本和 RDS 系統之間的無類別網域間路由 (CIDR) 範圍可能會重疊。CIDR 重疊會使複本不穩定，這會對連線到該複本的應用程式產生負面影響。如果您在建立僅供讀取複本時收到錯誤，請選擇不同的目的地資料庫子網路群組。如需詳細資訊，請參閱[在 VPC 中使用資料庫執行個體](USER_VPC.WorkingWithRDSInstanceinaVPC.md)。  
沒有直接方式可以使用 AWS 帳戶 主控台或 在另一個 中建立僅供讀取複本 AWS CLI。

## 主控台
<a name="USER_ReadRepl.Create.Console"></a>

**若要從來源資料庫執行個體建立僅供讀取複本**

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

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

1. 選擇要作為僅供讀取複本來源的資料庫執行個體。

1. 在 **Actions (動作)** 中選擇 **Create read replica (建立僅供讀取複本)**。

1. 在 **DB instance identifier (資料庫執行個體識別碼)** 中，輸入僅供讀取複本的名稱。

1. 選擇您的執行個體組態。建議您使用與僅供讀取複本來源資料庫執行個體相同或更大的資料庫執行個體類別和儲存體類型。

1. 對於 **AWS 區域**，指定僅供讀取複本的目的地區域。

1. 對於**儲存體**，指定配置的儲存體大小，以及您是否要使用儲存體自動擴展。

   如果您的來源資料庫執行個體不在最新的儲存體組態上，則可以使用**升級儲存體檔案系統組態**選項。您可以啟用此設定，將僅供讀取複本的儲存體檔案系統升級為偏好的組態。如需詳細資訊，請參閱[升級資料庫執行個體的儲存體檔案系統](USER_PIOPS.UpgradeFileSystem.md)。

1. 對於**可用性**，選擇是否要在另一個可用區域中建立複本的待命複本，以支援複本的容錯移轉。
**注意**  
建立您的僅供讀取複本做為多可用區域資料庫執行個體，與來源資料庫是否為多可用區域資料庫執行個體無關。

1. 指定其他資料庫執行個體設定。如需每項可用設定的相關資訊，請參閱 [資料庫執行個體的設定](USER_CreateDBInstance.Settings.md)。

1. 若要建立加密的僅供讀取複本，請展開**其他組態**並指定下列設定：

   1. 選擇 **Enable encryption** (啟用加密)。

   1. 在 **AWS KMS key**中，選擇 KMS 金鑰的 AWS KMS key 識別碼。
**注意**  
 來源資料庫執行個體必須加密。若要進一步了解如何加密來源資料庫執行個體，請參閱[加密 Amazon RDS 資源](Overview.Encryption.md)。

1. 選擇 **Create read replica (建立僅供讀取複本)**。

建立讀取複本之後，您可以在 RDS 主控台的 **Databases** (資料庫) 頁面上看到它。它在 **Role** (角色) 欄中顯示 **Replica** (複本)。

## AWS CLI
<a name="USER_ReadRepl.Create.CLI"></a>

若要從來源資料庫執行個體建立僅供讀取複本，請使用 AWS CLI 命令 [create-db-instance-read-replica](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html)。此範例也會設定配置的儲存體大小、啟用儲存體自動擴展，並將檔案系統升級為偏好的組態。

您可以指定其他設定。如需每項設定的相關資訊，請參閱 [資料庫執行個體的設定](USER_CreateDBInstance.Settings.md)。

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

```
aws rds create-db-instance-read-replica \
    --db-instance-identifier myreadreplica \
    --source-db-instance-identifier mydbinstance \
    --allocated-storage 100 \
    --max-allocated-storage 1000 \
    --upgrade-storage-config
```
在 Windows 中：  

```
aws rds create-db-instance-read-replica ^
    --db-instance-identifier myreadreplica ^
    --source-db-instance-identifier mydbinstance ^
    --allocated-storage 100 ^
    --max-allocated-storage 1000 ^
    --upgrade-storage-config
```

## RDS API
<a name="USER_ReadRepl.Create.API"></a>

若要從來源 Db2、MySQL、MariaDB、Oracle、PostgreSQL 或 SQL Server 資料庫執行個體建立僅供讀取複本，請呼叫 Amazon RDS API [CreateDBInstanceReadReplica](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html) 操作，其中包含下列必要參數：
+ `DBInstanceIdentifier`
+ `SourceDBInstanceIdentifier`

**注意**  
 若要建立 RDS for Db2 待命複本，請將選用 `ReplicaMode` 操作設定為 `mounted`。

# 提升僅供讀取複本為獨立的資料庫執行個體
<a name="USER_ReadRepl.Promote"></a>

您可以將僅供讀取複本提升為獨立的資料庫執行個體。如果來源資料庫執行個體擁有多個僅供讀取複本，將其中一個僅供讀取複本提升為資料庫執行個體，並不會影響其他的複本。

當您提升僅供讀取複本時，RDS 會先將資料庫執行個體重新開機，再使其可供使用。該提升程序可耗費數分鐘或更長的時間來完成，視僅供讀取複本大小而定。

![\[提升僅供讀取複本\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/read-replica-promote.png)


## 提升僅供讀取複本的使用案例
<a name="USER_ReadRepl.Promote.use_cases"></a>

您可能基於下列任何原因，而想要將僅供讀取複本提升為獨立資料庫執行個體：
+ **實作故障復原** – 您可用僅供讀取複本提升，做為主要資料庫執行個體故障時的資料復原結構描述。這種方法可用於補強同步複寫、自動故障偵測和容錯移轉。

  如果您已了解非同步複寫的後果和限制，但仍想使用僅供讀取複本提升做為資料復原，可以這樣做。要進行此操作，請先建立僅供讀取複本，然後監控主要資料庫執行個體的故障。若發生故障，請執行下列程序：

  1. 提升僅供讀取複本。

  1. 將資料庫流量引導至提升的資料庫執行個體。

  1. 以提升的資料庫執行個體做為來源，建立替換的僅供讀取複本。
+ **升級儲存體組態** - 如果來源資料庫執行個體不在偏好的儲存體組態上，您可以建立執行個體的僅供讀取複本，並升級儲存體檔案系統組態。此選項會將僅供讀取複本的檔案系統遷移至偏好的組態。您接著可以將僅供讀取複本提升為獨立的執行個體。

  您可以使用此選項，克服舊版 32 位元檔案系統對儲存體和檔案大小的擴展限制。如需詳細資訊，請參閱[升級資料庫執行個體的儲存體檔案系統](USER_PIOPS.UpgradeFileSystem.md)。

  只有在您的來源資料庫執行個體*不*在最新的儲存體組態上時，或只有在您要在相同請求內修改資料庫執行個體類別時，才能使用此選項。
+ **分片** – 分片採用「不共用」架構，基本上就是將一個大型資料庫分成多個較小的資料庫。拆分資料庫的一種常見方式，就是將未加入同一個查詢的資料表拆分到不同的主機。另一個方法是將資料表複製到多個主機，接著使用雜湊演算法來決定哪個主機將接收特定的更新。您可建立與每個分片 (較小的資料庫) 對應的僅供讀取複本，然後在您決定將其轉換為獨立分片時加以提升。接著您可根據需求調整金鑰空間 (如果要拆分資料列) 或分散資料表到每個分片。
+ **執行 DDL 操作 (僅限 MySQL 和 MariaDB)** – 像是建立或重建索引等 DDL 操作需要一段時間，且會大幅降低資料庫執行個體的效能。一旦僅供讀取複本與其主要資料庫執行個體同步後，您便能在 MySQL 或 MariaDB 僅供讀取複本上執行這些操作。接著您可提升僅供讀取複本，並指示應用程式使用提升的執行個體。

**注意**  
如果您的僅供讀取複本是 RDS for Oracle 資料庫執行個體，您可以執行*轉換*而非提升。在轉換中，來源資料庫執行個體會成為新複本，而複本會成為新的來源資料庫執行個體。如需詳細資訊，請參閱[執行 Oracle Data Guard 容錯移轉](oracle-replication-switchover.md)。

## 僅供讀取複本提升後的特性
<a name="USER_ReadRepl.Promote.characteristics"></a>

僅供讀取複本在提升之後，會停止以僅供讀取複本的形式運作，並成為獨立資料庫執行個體。新的獨立資料庫執行個體具有下列特性：
+ 獨立資料庫執行個體會保留提升前僅供讀取複本的選項群組和參數群組。
+ 您可以從獨立資料庫執行個體建立僅供讀取複本，並執行時間點還原操作。
+ 由於該資料庫執行個體已不再是僅供讀取複本，因此無法做為複寫目標。

## 提升僅供讀取複本的先決條件
<a name="USER_ReadRepl.Promote.prereqs"></a>

提升僅供讀取複本之前，請先執行下列動作：
+ 檢閱您的備份策略：
  + 建議您啟用備份，並至少完成一次備份。備份持續期間為自上次備份後資料庫變更的數量函數。
  + 如果您已啟用僅供讀取複本的備份，請設定自動備份時間，以免日常備份干擾到僅供讀取複本的提升。
  + 確定您的僅供讀取複本未處於 `backing-up` 狀態。您無法提升處於此狀態的僅供讀取複本。
+ 禁止任何交易寫入至主要資料庫執行個體，然後等待 RDS 將所有更新套用至僅供讀取複本。

  資料庫更新在主要資料庫執行個體上發生之後，會在僅供讀取複本上發生。複寫延遲可能會有很大的差異。使用 [https://aws.amazon.com/rds/faqs/#105](https://aws.amazon.com/rds/faqs/#105) 指標以確定針對僅供讀取複本進行的所有更新時間。
+ (僅限 MySQL 和 MariaDB) 在提升 MySQL 或 MariaDB 僅供讀取複本之前若要先加以變更，請在僅供讀取複本的資料庫參數群組中將 `read_only` 參數設定為 `0`。接著您便能執行所有必要的 DDL 操作，像是在僅供讀取複本上建立索引。在僅供讀取複本上擷取快照，不會影響主要資料庫執行個體的效能。

## 提升僅供讀取複本：基本步驟
<a name="USER_ReadRepl.Promote.steps"></a>

以下步驟顯示了提升僅供讀取複本至資料庫執行個體的一般流程：

1. 使用 Amazon RDS 主控台上的**提升**選項、 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica.html](https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica.html)或 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html) Amazon RDS API 操作來提升僅供讀取複本。
**注意**  
提升程序可能需要幾分鐘來完成。當您提升僅供讀取複本後，RDS 就會停止複寫，並將僅供讀取複本重新開機。當重新啟動完成，該僅供讀取複本便可用做新的資料庫執行個體。

1. (選用) 將新的資料庫執行個體修改為異地同步備份部署。如需詳細資訊，請參閱 [修改 Amazon RDS 資料庫執行個體](Overview.DBInstance.Modifying.md) 及 [設定及管理 Amazon RDS 的多可用區域部署](Concepts.MultiAZ.md)。

### 主控台
<a name="USER_ReadRepl.Promote.Console"></a>

**若要將僅供讀取複本提升為獨立的資料庫執行個體**

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

1. 在 Amazon RDS 主控台，選擇 **Databases (資料庫)**。

   **Databases (資料庫)** 窗格隨即出現。每個僅供讀取複本會在 **Role (角色)** 欄中顯示 **Replica (複本)**。

1. 選擇您要提升的僅供讀取複本。

1. 針對 **Actions (動作)**，選擇 **Promote (提升)**。

1. 在**提升僅供讀取複本**頁面上，輸入新升級資料庫執行個體的備份保留期和備份時間。

1. 滿意所有設定時，請選擇 **Continue (繼續)**。

1. 在確認頁面上，選擇 **Promote Read Replica (提升僅供讀取複本)**。

### AWS CLI
<a name="USER_ReadRepl.Promote.CLI"></a>

若要將僅供讀取複本提升為獨立資料庫執行個體，請使用 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica.html](https://docs.aws.amazon.com/cli/latest/reference/rds/promote-read-replica.html) 命令。

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

```
aws rds promote-read-replica \
    --db-instance-identifier myreadreplica
```
在 Windows 中：  

```
aws rds promote-read-replica ^
    --db-instance-identifier myreadreplica
```

### RDS API
<a name="USER_ReadRepl.Promote.API"></a>

若要將僅供讀取複本提升為獨立的資料庫執行個體，請使用所需參數 `DBInstanceIdentifier` 呼叫 Amazon RDS API [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html) 操作。

# 監控僅供讀取複本
<a name="USER_ReadRepl.Monitoring"></a>

您可用多種方式監控僅供讀取複本的狀態。Amazon RDS 主控台在僅供讀取複本詳細內容的 **Connectivity & security (連線和安全)** 的 **Replication (複寫)** 區段中顯示僅供讀取複本的狀態。若要檢視僅供讀取複本的詳細資訊，請在 Amazon RDS 主控台的資料庫執行個體清單中選擇僅供讀取複本的名稱。

![\[僅供讀取複本狀態\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/ReadReplicaStatus.png)


您也可以使用 AWS CLI `describe-db-instances`命令或 Amazon RDS API `DescribeDBInstances`操作來查看僅供讀取複本的狀態。

僅供讀取複本的狀態可以是下列其中一個：
+ ****replicating (複寫中)**–**僅供讀取複本正在成功複寫中。
+ ****複寫效能降級** (僅限 SQL Server 和 PostgreSQL) – **複本正在接收來自主要執行個體的資料，但一或多個資料庫可能無法取得更新。例如，當複本正在設定新建立的資料庫時，就會發生這種情況。在藍/綠部署的藍色環境中進行不支援的 DDL 或大型物件變更時，也可能會發生這種情況。

  除非在降級狀態期間發生錯誤，否則狀態不會從 `replication degraded` 轉換為 `error`。
+ ****error (錯誤)**–**​ 複寫發生錯誤。請檢查 Amazon RDS 主控台中的 **Replication Error (複寫錯誤)** 欄位或事件記錄，以判斷確切的錯誤。如需有關複寫錯誤疑難排解的詳細資訊，請參閱 [對 MySQL 僅供讀取複本問題進行故障診斷](USER_ReadRepl.Troubleshooting.md)。
+ ****terminated (已終止)** (僅限 MariaDB、MySQL 或 PostgreSQL) –** 已終止複寫。此錯誤是因複寫作業停止連續超過 30 天所導致 (不論手動停止或由於複寫錯誤)。在此情況下，Amazon RDS 會終止主要資料庫執行個體與所有僅供讀取複本之間的複寫。Amazon RDS 會執行此操作以避免來源資料庫執行個體的儲存需求增加以及長期容錯移轉。

  複寫中斷可能影響儲存，因為記錄的大小與數量會因為大量錯誤訊息寫入記錄而成長。複寫中斷也會影響故障復原，因為 Amazon RDS 在復原期間需要時間來維護及處理大量記錄。
+ ****terminated** (已終止) (僅限 Oracle)** – 已終止複寫。如果複寫已停止超過 8 小時，則會發生此情況，因為僅供讀取複本上沒有足夠的儲存體。在此情況下，Amazon RDS 會終止主要資料庫執行個體與受影響的僅供讀取複本之間的複寫。此狀態為終端狀態，且僅供讀取複本必須重新建立。
+ ****stopped (已停止)** (僅限 MariaDB 或 MySQL) –** 複寫因客戶提出要求而停止。
+ ****replication stop point set (設定了複寫停止點)** (僅限 MySQL)–**使用 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程序設定了客戶啟動的停止點，而且複寫正在進行中。
+ ****replication stop point set (達到複寫停止點)** (僅限 MySQL)–**使用 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 預存程序設定了客戶啟動的停止點，複寫因達到停止點而停止。

您可以查看複寫資料庫執行個體的位置，並且檢查其複寫狀態。在 RDS 主控台的 **Databases** (資料庫) 頁面上，它會在 **Role** (角色) 欄中顯示 **Primary** (主要)。選擇其資料庫執行個體名稱。在其詳細資訊頁面上，在 **Connectivity & security** (連線能力和安全性) 索引標籤中，其複寫狀態位於 **Replication** (複寫) 下面。

## 監控複寫延遲
<a name="USER_ReadRepl.Monitoring.Lag"></a>

您可以在 Amazon CloudWatch 中透過檢視 Amazon RDS `ReplicaLag` 指標來監控複寫延遲。

對於 Db2，`ReplicaLag` 指標是落後的資料庫延遲上限 (以秒為單位)。例如，如果兩個資料庫分別延遲了 5 秒和 10 秒，則 `ReplicaLag` 為 10 秒。資料庫若沒有可用的高可用性災難復原 (HADR) 狀態，不會納入計算中。

如為 MariaDB 和 MySQL，`ReplicaLag` 指標會回報 `Seconds_Behind_Master` 命令的 ​`SHOW REPLICA STATUS` 欄位值。MySQL 和 MariaDB 複寫延遲的常見原因如下：
+ 網路停機。
+ 寫入僅供讀取複本上的資料表仍有索引。若未將僅供讀取複本的 `read_only` 參數設為 0，可能會中斷複寫。
+ 使用非交易儲存引擎 (例如 MyISAM)。僅 MySQL 上的 InnoDB 儲存引擎和 MariaDB 上的 XtraDB 儲存引擎支援複寫。

**注意**  
MariaDB 以前的版本使用 `SHOW SLAVE STATUS` 而不是 `SHOW REPLICA STATUS`。如果您使用低於 10.5 的 MariaDB 版本，請使用 `SHOW SLAVE STATUS`。

當 `ReplicaLag` 指標到達 0，複本即已跟上主要資料庫執行個體。如果 `ReplicaLag` 指標傳回 `-1`，表示複寫目前為非作用中。`ReplicaLag = -1` 相當於 `Seconds_Behind_Master = NULL`。

對於 Oracle，`ReplicaLag` 指標是 `Apply Lag` 值與目前時間和套用延遲 `DATUM_TIME` 值之差的總和。`DATUM_TIME` 值是僅供讀取複本從其來源資料庫執行個體接收資料的最後時間。如需詳細資訊，請參閱 Oracle 文件中的 [ V\$1DATAGUARD\$1STATS](https://docs.oracle.com/database/121/REFRN/GUID-B346DD88-3F5E-4F16-9DEE-2FDE62B1ABF7.htm#REFRN30413)。

對於 SQL Server，`ReplicaLag` 指標是落後的資料庫延遲上限 (以秒為單位)。例如，如果您有兩個分別延遲 5 秒和 10 秒的資料庫，則 `ReplicaLag` 為 10 秒。`ReplicaLag` 指標會傳回下列查詢的值。

```
SELECT MAX(secondary_lag_seconds) max_lag FROM sys.dm_hadr_database_replica_states;
```

如需詳細資訊，請參閱 Microsoft 文件中的 [secondary\$1lag\$1seconds](https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-hadr-database-replica-states-transact-sql)。

如果 RDS 無法判斷延遲，例如在複本設定期間或是僅供讀取複本處於 `ReplicaLag` 狀態的時間，`-1` 會傳回 `error`。

**注意**  
在新資料庫在僅供讀取複本上可供存取之前，將不會列入延遲計算中。

對於 PostgreSQL，`ReplicaLag` 指標會傳回下列查詢的值。

```
SELECT extract(epoch from now() - pg_last_xact_replay_timestamp()) AS reader_lag
```

PostgreSQL 9.5.2 版和更新版本使用實體複寫槽來管理在來源執行個體上的預先寫入日誌 (WAL) 保留期。對於各個跨區域的僅供讀取複本執行個體來說，Amazon RDS 會建立實體複寫槽，並將其與執行個體建立關聯。兩個 Amazon CloudWatch 指標，`Oldest Replication Slot Lag` 與 `Transaction Logs Disk Usage`，以收到的 WAL 資料來顯示大多數延遲複本的落後進度，並顯示 WAL 資料用了多少儲存空間。`Transaction Logs Disk Usage` 值可在跨區域僅供讀取複本嚴延遲時大幅增加。

如需使用 CloudWatch 監控資料庫執行個體的詳細資訊，請參閱 [使用 Amazon CloudWatch 監控 Amazon RDS 指標](monitoring-cloudwatch.md)。

# 在不同的 中建立僅供讀取複本 AWS 區域
<a name="USER_ReadRepl.XRgn"></a>

使用 Amazon RDS，您可以在 AWS 區域 與來源資料庫執行個體不同的 中建立僅供讀取複本。

![\[跨區域僅供讀取複本組態\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/read-replica-cross-region.png)


您可以在不同的 中建立僅供讀取複本 AWS 區域 ，以執行下列動作：
+ 改善災難復原功能。
+ 將讀取操作擴展到 AWS 區域 更接近使用者的位置。
+ 讓您更輕鬆地從一個 中的資料中心遷移 AWS 區域 到另一個 中的資料中心 AWS 區域。

在 AWS 區域 與來源執行個體不同的 中建立僅供讀取複本類似於在相同的 中建立複本 AWS 區域。您可以使用 AWS 管理主控台、執行 [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html)命令，或呼叫 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html) API 操作。

**注意**  
若要在與來源資料庫執行個體 AWS 區域 不同的 中建立加密的僅供讀取複本，來源資料庫執行個體必須加密。

**Topics**
+ [區域和版本可用性](#USER_ReadRepl.XRgn.RegionVersionAvailability)
+ [建立跨區域僅供讀取複本](#ReadRepl.XRgn)
+ [Amazon RDS 如何執行跨區域複寫](#USER_ReadRepl.XRgn.Process)
+ [跨區域複寫考量](#USER_ReadRepl.XRgn.Cnsdr)
+ [跨區域複寫成本](#USER_ReadRepl.XRgn.Costs)

## 區域和版本可用性
<a name="USER_ReadRepl.XRgn.RegionVersionAvailability"></a>

功能可用性和支援會因每個資料庫引擎的特定版本以及 AWS 區域而有所不同。如需跨區域複寫的版本和區域可用性的相關資訊，請參閱[支援 Amazon RDS 中跨區域僅供讀取複本的區域和資料庫引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.CrossRegionReadReplicas.md)。

## 建立跨區域僅供讀取複本
<a name="ReadRepl.XRgn"></a>

下列程序說明如何在不同 AWS 區域中，從來源 Db2、MariaDB、Microsoft SQL Server、MySQL、Oracle 或 PostgreSQL 資料庫執行個體建立僅供讀取複本。

### 主控台
<a name="USER_ReadRepl.XRgn.CON"></a>

您可以使用 跨 建立僅供讀取複本 AWS 區域 AWS 管理主控台。

**AWS 區域 使用主控台跨 建立僅供讀取複本**

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

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

1. 選擇要作為僅供讀取複本來源的 Db2、MariaDB、Microsoft SQL Server、MySQL、Oracle 或 PostgreSQL 資料庫執行個體。

1. 在 **Actions (動作)** 中選擇 **Create read replica (建立僅供讀取複本)**。

1. 在 **DB instance identifier (資料庫執行個體識別符)** 中，輸入僅供讀取複本的名稱。

1. 選擇 **Destination Region (目的地區域)**。

1. 選擇您想要使用的執行個體規格。建議您使用與僅供讀取複本相同或更大的資料庫執行個體類別和儲存體類型。

1. 若要在另一個 中建立加密的僅供讀取複本 AWS 區域：

   1. 選擇 **Enable encryption** (啟用加密)。

   1. 若為 **AWS KMS key**，選擇目的地 AWS 區域 KMS 金鑰的 AWS KMS key 識別符。
**注意**  
 若要建立加密的僅供讀取複本，來源資料庫執行個體也必須加密。若要進一步了解如何加密來源資料庫執行個體，請參閱[加密 Amazon RDS 資源](Overview.Encryption.md)。

1. 請選擇其他選項，例如 storage autoscaling (儲存體自動擴展)。

1. 選擇 **Create read replica (建立僅供讀取複本)**。

### AWS CLI
<a name="USER_ReadRepl.XRgn.CLI"></a>

若要從不同來源 Db2、MariaDB、Microsoft SQL Server、MySQL、Oracle 或 PostgreSQL 資料庫執行個體建立僅供讀取複本 AWS 區域，您可以使用 [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html)命令。於此情況下，您會使用想要的僅供讀取複本之 AWS 區域 (目的地區域) 的 [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html)，並指定來源資料庫執行個體的 Amazon Resource Name (ARN)。ARN 專門識別在 Amazon Web Services 中建立的資源。​

例如，假如您的來源資料庫執行個體位在 US East (N. Virginia) 區域，則 ARN 看起來類似如下。

```
arn:aws:rds:us-east-1:123456789012:db:mydbinstance
```

如需 ARN 的詳細資訊，請參閱 [Amazon RDS 中的 Amazon Resource Name (ARN)](USER_Tagging.ARN.md)。

 若要在與來源資料庫執行個體 AWS 區域 不同的 中建立僅供讀取複本，您可以從目的地使用 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html)命令 AWS 區域。在另一個 AWS 區域中建立僅供讀取複本時需要下列參數：
+  `--region` – 建立僅供讀取複本 AWS 區域 的目的地。
+  `--source-db-instance-identifier` – 來源資料庫執行個體的資料庫執行個體識別碼。此識別符必須是來源 AWS 區域的 ARN 格式。
+  `--db-instance-identifier` – 指定目的地 AWS 區域中僅供讀取複本的識別符。

**Example 跨區域僅供讀取複本**  
下列程式碼會透過 US East (N. Virginia) 區域中的來源資料庫執行個體，在 美國西部 (奧勒岡) 區域中建立僅供讀取複本。  
針對 Linux、macOS 或 Unix：  

```
aws rds create-db-instance-read-replica \
    --db-instance-identifier myreadreplica \
    --region us-west-2 \
    --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:mydbinstance
```
在 Windows 中：  

```
aws rds create-db-instance-read-replica ^
    --db-instance-identifier myreadreplica ^
    --region us-west-2 ^
    --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:mydbinstance
```

在另一個 AWS 區域中建立加密的僅供讀取複本時還需要下列參數：
+  `--kms-key-id` – 用來加密目的地 中僅供讀取複本的 KMS 金鑰 AWS KMS key 識別符 AWS 區域。

**Example 加密的跨區域僅供讀取複本**  
下列程式碼會透過 US East (N. Virginia) 區域中的來源資料庫執行個體，在 美國西部 (奧勒岡) 區域中建立加密的僅供讀取複本。  
針對 Linux、macOS 或 Unix：  

```
aws rds create-db-instance-read-replica \
    --db-instance-identifier myreadreplica \
    --region us-west-2 \
    --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:mydbinstance \
    --kms-key-id my-us-west-2-key
```
在 Windows 中：  

```
aws rds create-db-instance-read-replica ^
    --db-instance-identifier myreadreplica ^
    --region us-west-2 ^
    --source-db-instance-identifier arn:aws:rds:us-east-1:123456789012:db:mydbinstance ^
    --kms-key-id my-us-west-2-key
```

當您在 AWS GovCloud （美國東部） 和 AWS GovCloud （美國西部） 區域之間建立加密的僅供讀取複本時，需要 `--source-region`選項。若為 `--source-region`，請指定來源資料庫執行個體的 AWS 區域 。

若未指定 `--source-region`，請指定 `--pre-signed-url` 值。*presigned URL* (預先簽章的 URL) 為包含對來源 AWS 區域中呼叫 `create-db-instance-read-replica` 命令之 Signature 第 4 版簽章請求的 URL。如要進一步了解 `pre-signed-url` 選項，請參閱*《AWS CLI 命令參考》*中的 [create-db-instance-read-replica](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance-read-replica.html)。

### RDS API
<a name="USER_ReadRepl.XRgn.API"></a>

若要從不同來源 Db2、MariaDB、MySQL、Microsoft SQL Server、Oracle 或 PostgreSQL 資料庫執行個體建立僅供讀取複本 AWS 區域，您可以呼叫 Amazon RDS API 操作 [CreateDBInstanceReadReplica](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html)。在此情況下，您可以從您想要僅供讀取複本 （目的地區域） AWS 區域 的 呼叫 [CreateDBInstanceReadReplica](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html)，並指定來源資料庫執行個體的 Amazon Resource Name (ARN)。ARN 專門識別在 Amazon Web Services 中建立的資源。​

若要在與來源資料庫執行個體 AWS 區域 不同的 中建立加密僅供讀取複本，您可以從目的地使用 Amazon RDS API [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html)操作 AWS 區域。若要在另一個 中建立加密的僅供讀取複本 AWS 區域，您必須指定 的值`PreSignedURL`。 `PreSignedURL`應包含請求，讓 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html)操作在建立僅供讀取複本 AWS 區域 的來源中呼叫 。要進一步了解 `PreSignedUrl`，請參閱 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html)。

例如，假如您的來源資料庫執行個體位在 US East (N. Virginia) 區域，則 ARN 看起來類似如下。

```
arn:aws:rds:us-east-1:123456789012:db:mydbinstance
```

如需 ARN 的詳細資訊，請參閱 [Amazon RDS 中的 Amazon Resource Name (ARN)](USER_Tagging.ARN.md)。

**Example**  

```
https://us-west-2.rds.amazonaws.com/
    ?Action=CreateDBInstanceReadReplica
    &KmsKeyId=my-us-east-1-key
    &PreSignedUrl=https%253A%252F%252Frds.us-west-2.amazonaws.com%252F
         %253FAction%253DCreateDBInstanceReadReplica
         %2526DestinationRegion%253Dus-east-1
         %2526KmsKeyId%253Dmy-us-east-1-key
         %2526SourceDBInstanceIdentifier%253Darn%25253Aaws%25253Ards%25253Aus-west-2%123456789012%25253Adb%25253Amydbinstance
         %2526SignatureMethod%253DHmacSHA256
         %2526SignatureVersion%253D4%2526SourceDBInstanceIdentifier%253Darn%25253Aaws%25253Ards%25253Aus-west-2%25253A123456789012%25253Ainstance%25253Amydbinstance
         %2526Version%253D2014-10-31
         %2526X-Amz-Algorithm%253DAWS4-HMAC-SHA256
         %2526X-Amz-Credential%253DAKIADQKE4SARGYLE%252F20161117%252Fus-west-2%252Frds%252Faws4_request
         %2526X-Amz-Date%253D20161117T215409Z
         %2526X-Amz-Expires%253D3600
         %2526X-Amz-SignedHeaders%253Dcontent-type%253Bhost%253Buser-agent%253Bx-amz-content-sha256%253Bx-amz-date
         %2526X-Amz-Signature%253D255a0f17b4e717d3b67fad163c3ec26573b882c03a65523522cf890a67fca613
    &DBInstanceIdentifier=myreadreplica
    &SourceDBInstanceIdentifier=&region-arn;rds:us-east-1:123456789012:db:mydbinstance
    &Version=2012-01-15						
    &SignatureVersion=2
    &SignatureMethod=HmacSHA256
    &Timestamp=2012-01-20T22%3A06%3A23.624Z
    &AWSAccessKeyId=<&AWS; Access Key ID>
    &Signature=<Signature>
```

## Amazon RDS 如何執行跨區域複寫
<a name="USER_ReadRepl.XRgn.Process"></a>

Amazon RDS 使用下列流程建立跨區域僅供讀取複本。視 AWS 區域 涉及的 和資料庫中的資料量而定，此程序可能需要數小時才能完成。您可在建立跨區域僅供讀取複本時利用此資訊來判斷流程的進度：

1. Amazon RDS 開始將來源資料庫執行個體設定為複寫來源，並將狀態設為 *modifying (修改中)*。

1. Amazon RDS 開始設定指定 AWS 區域 中的指定僅供讀取複本，並將狀態設為 *creating* (建立中)。

1. Amazon RDS 對來源 AWS 區域中的來源資料庫執行個體建立自動化資料庫快照。資料庫快照名稱的格式為 `rds:<InstanceID>-<timestamp>`，其中 `<InstanceID>` 為來源執行個體的識別碼，`<timestamp>` 為複製開始的日期和時間。例如，`rds:mysourceinstance-2013-11-14-09-24` 是從 `mysourceinstance` 執行個體於 `2013-11-14-09-24` 所建立。​ 在建立自動化資料庫快照期間，來源資料庫執行個體狀態會保持為 *modifying (修改中)*，僅供讀取複本的狀態保持為 *creating (建立中)*，而資料庫快照的狀態則為 *creating (建立中)*。主控台中資料庫快照頁面的進度欄將回報資料庫快照建立的進度。資料庫快照完成時，資料庫快照和來源資料庫執行個體的狀態將同時設為 *available (可用)*。

1. Amazon RDS 開始進行初始資料傳輸的跨區域快照複製。快照複本在目的地 AWS 區域 將列為自動化快照，狀態顯示 *creating* (建立中)。其名稱與來源資料庫快照的名稱相同。資料庫快照的進度欄將顯示複製的進度。一旦複製完成，資料庫快照的狀態會變成 *available (可用)*。

1. 然後 Amazon RDS 會將複製的資料庫快照用於僅供讀取複本上的初始資料載入。在此階段，僅供讀取複本會列在目的地的資料庫執行個體清單中，狀態為 *creating (建立中)*。一旦載入完成，僅供讀取複本的狀態會變成 *available (可用)*，並將刪除資料庫快照複本。

1. 僅供讀取複本變成可供使用狀態之後，Amazon RDS 會開始複寫從建立僅供讀取複本操作起始起，對來源執行個體進行的變更。在此階段期間，僅供讀取複本的複寫延遲時間將大於 0。

   如需複寫延遲時間的資訊，請參閱 [監控僅供讀取複本](USER_ReadRepl.Monitoring.md)。

## 跨區域複寫考量
<a name="USER_ReadRepl.XRgn.Cnsdr"></a>

在 內執行複寫的所有考量 AWS 區域 都適用於跨區域複寫。在 AWS 區域間複寫時，適用下列的額外考量：
+ 來源資料庫執行個體可在多個 AWS 區域有跨區域僅供讀取複本。由於來源 VPC 的存取控制清單 (ACL) 項目有數量限制，RDS 不保證可建立五個以上的跨區域僅供讀取複本資料庫執行個體。
+  AWS 區域 每個帳戶最多可以有 20 個同時建立跨區域僅供讀取複本請求正在進行到單一目的地。您必須等待這些請求完成，才能將額外的建立跨區域僅供讀取複本請求提交至相同的目的地 AWS 區域。
+ 您可以在 GovCloud (US-East) 和 GovCloud (US-West) 區域之間進行複寫，但不能複寫至 GovCloud (US) 中或在其之外進行複寫。
+ 對於下列 RDS 引擎，只有不是其他 Amazon RDS 資料庫執行個體的僅供讀取複本，才可供您做為來源 Amazon RDS 資料庫執行個體，建立跨區域 Amazon RDS 僅供讀取複本。
  + RDS for Db2
  + RDS for SQL Server
  + RDS for Oracle
  + 低於 14.1 的 RDS for PostgreSQL 版本

  此限制不適用於執行 RDS for PostgreSQL 14.1 版和更高版本、RDS for MariaDB 和 RDS for MySQL 的資料庫執行個體。
+ 對於與來源執行個體 AWS 區域 不同的任何僅供讀取複本，您可以預期看到較高的延遲時間層級。此延遲時間是由於區域資料中心之間有較長的網路通道。
+ 如為跨區域僅供讀取複本，任何指定 `--db-subnet-group-name` 參數的建立僅供讀取複本命令皆必須指定同一 VPC 的資料庫子網路群組。
+ 在大多數情況下，僅供讀取複本使用指定資料庫引擎的預設資料庫參數群組和資料庫選項群組。

  對於 Db2 資料庫引擎，您必須指定複本的自訂參數群組。對於使用 BYOL 模式的複本，此自訂參數群組必須包含您的 IBM Site ID 和 IBM Customer ID。您可以使用 AWS 管理主控台、 或 RDS API AWS CLI，為複本指定此自訂參數群組。如需詳細資訊，請參閱[Db2 的自帶授權 (BYOL) IBM ID](db2-licensing.md#db2-prereqs-ibm-info)。

  對於 MySQL 和 Oracle 資料庫引擎，您可在 AWS CLI 命令 [create-db-instance-read-replica](https://docs.aws.amazon.com//cli/latest/reference/rds/create-db-instance-read-replica.html) 的 `--db-parameter-group-name` 選項中指定僅供讀取複本的自訂參數群組。使用 AWS 管理主控台時，您無法指定自訂參數群組。
+ 僅供讀取複本使用預設安全群組。
+ 對於 Db2、MariaDB、Microsoft SQL Server、MySQL 及 Oracle DB 資料庫執行個體，刪除跨區域僅供讀取複本的來源資料庫執行個體時，僅供讀取複本會提升。
+ 若為 MariaDB、MySQL 和 PostgreSQL 資料庫執行個體，刪除跨區域僅供讀取複本的來源資料庫執行個體時，僅供讀取複本的複寫狀態會設為 `terminated`。不會提升僅供讀取複本。

  您必須手動提升僅供讀取複本，或將其刪除。

### 請求跨區域僅供讀取複本
<a name="ReadRepl.XRgn.Policy"></a>

若要與來源區域通訊，以請求建立跨區域僅供讀取複本，請求者 (IAM 角色或 IAM 使用者) 必須具有來源資料庫執行個體和來源區域的存取權。

請求者的 IAM 政策中的某些條件可能會導致請求失敗。下列範例假設來源資料庫執行個體位於 美國東部 (俄亥俄)，而僅供讀取複本則會在 US East (N. Virginia) 中建立。以下範例顯示請求者 IAM 政策中導致請求失敗的條件：
+ 請求者的政策具有 `aws:RequestedRegion` 的條件。

  ```
  ...
  "Effect": "Allow",
  "Action": "rds:CreateDBInstanceReadReplica",
  "Resource": "*",
  "Condition": {
      "StringEquals": {
          "aws:RequestedRegion": "us-east-1"
      }
  }
  ```

  由於政策不允許存取來源區域，請求失敗。若要成功請求，請同時指定來源區域和目的地區域。

  ```
  ...
  "Effect": "Allow",
  "Action": "rds:CreateDBInstanceReadReplica",
  "Resource": "*",
  "Condition": {
      "StringEquals": {
          "aws:RequestedRegion": [
              "us-east-1",
              "us-east-2"
          ]
      }
  }
  ```
+ 請求者的政策不允許存取來源資料庫執行個體。

  ```
  ...
  "Effect": "Allow",
  "Action": "rds:CreateDBInstanceReadReplica",
  "Resource": "arn:aws:rds:us-east-1:123456789012:db:myreadreplica"
  ...
  ```

  若是成功請求，請同時指定來源執行個體和複本。

  ```
  ...
  "Effect": "Allow",
  "Action": "rds:CreateDBInstanceReadReplica",
  "Resource": [
      "arn:aws:rds:us-east-1:123456789012:db:myreadreplica",
      "arn:aws:rds:us-east-2:123456789012:db:mydbinstance"
  ]
  ...
  ```
+ 請求者的政策拒絕 `aws:ViaAWSService`。

  ```
  ...
  "Effect": "Allow",
  "Action": "rds:CreateDBInstanceReadReplica",
  "Resource": "*",
  "Condition": {
      "Bool": {"aws:ViaAWSService": "false"}
  }
  ```

  與來源區域的通訊由 RDS 代表請求者進行。對於成功的請求，請勿拒絕 AWS 服務進行的呼叫。
+ 請求者的政策具有 `aws:SourceVpc` 或 `aws:SourceVpce` 的條件。

  這些請求可能會失敗，因為當 RDS 呼叫遠端區域時，其不是來自指定的 VPC 或 VPC 端點。

如果您需要使用會導致請求失敗的先前條件之一，則可以在政策中包含 `aws:CalledVia` 的第二個陳述式，以使請求成功。例如，您可以如下所示使用 `aws:CalledVia` 搭配 `aws:SourceVpce`：

```
...
"Effect": "Allow",
"Action": "rds:CreateDBInstanceReadReplica",
"Resource": "*",
"Condition": {
    "Condition" : { 
        "ForAnyValue:StringEquals" : {
          "aws:SourceVpce": "vpce-1a2b3c4d"
        }
     }
},
{
    "Effect": "Allow",
    "Action": [
        "rds:CreateDBInstanceReadReplica"
    ],
    "Resource": "*",
    "Condition": {
        "ForAnyValue:StringEquals": {
            "aws:CalledVia": [
                "rds.amazonaws.com"
            ]
        }
    }
}
```

如需詳細資訊，請參閱 *IAM 使用者指南* 中的 [IAM 中的政策和許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。

### 授權僅供讀取複本
<a name="ReadRepl.XRgn.Auth"></a>

跨區域資料庫僅供讀取複本建立請求之後傳回 `success`，RDS 會在後台啟動複本建立。系統會建立 RDS 存取來源資料庫執行個體的授權。此授權會將來源資料庫執行個體連結至僅供讀取複本，並允許 RDS 僅複製到指定的僅供讀取複本。

 授權由 RDS 使用服務連結 IAM 角色中的 `rds:CrossRegionCommunication` 許可來驗證。如果授權複本，RDS 會與來源區域通訊並完成複本建立。

 對於之前未透過 `CreateDBInstanceReadReplica` 請求授權的資料庫執行個體，RDS 將無法存取。僅供讀取複本建立完成時，會撤銷授權。

 RDS 使用服務連結的角色來驗證來源區域中的授權。如果您在複製建立程序期間刪除服務連結的角色，則複本則會失敗。

如需詳細資訊，請參閱 *IAM 使用者指南*中的[使用服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)。

### 使用 AWS Security Token Service 登入資料
<a name="ReadRepl.XRgn.assumeRole"></a>

來自 global AWS Security Token Service (AWS STS) 端點的工作階段權杖僅在預設啟用 AWS 區域 的 中有效 （商業區域）。如果您在 中使用來自 `assumeRole` API 操作的登入資料 AWS STS，如果來源區域是選擇加入區域，請使用區域端點。否則，請求將失敗。這是因為您的登入資料在兩個區域中都必須有效，只有在使用區域 AWS STS 端點時，才適用於選擇加入區域。

若要使用全域端點，請確保操作時在這兩個區域均已將其啟用。在 AWS STS 帳戶設定`Valid in all AWS 區域`中將全域端點設定為 。

 相同的規則適用於預先簽章 URL 參數中的登入資料。

如需詳細資訊，請參閱《*IAM 使用者指南*[AWS STS 》中的在 中管理 AWS 區域](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html) 。

## 跨區域複寫成本
<a name="USER_ReadRepl.XRgn.Costs"></a>

跨區域複寫傳輸的資料會衍生 Amazon RDS 數據傳輸費。對於傳出來源 AWS 區域的資料，這些跨區域複寫動作會產生費用：
+ 當您建立僅供讀取複本時，Amazon RDS 會取得來源執行個體的快照，並將快照傳輸至僅供讀取複本 AWS 區域。
+ 對於在來源資料庫中進行的每個資料修改，Amazon RDS 會將資料從來源傳輸 AWS 區域 到僅供讀取複本 AWS 區域。

如需資料傳輸定價的詳細資訊，請參閱 [Amazon RDS 定價](https://aws.amazon.com/rds/pricing/)。

如為 MySQL 和 MariaDB 執行個體，可透過減少建立的跨區域僅供讀取複本數量來降低資料傳輸成本。例如，假設您在一個 中有來源資料庫執行個體， AWS 區域 並且想要在另一個 中有三個僅供讀取複本 AWS 區域。在此情況下，您只從來源資料庫執行個體建立一個僅供讀取複本。另兩個僅供讀取複本則從第一個僅供讀取複本建立，而非來源資料庫執行個體。

例如，如果您在一個 `source-instance-1`中具有 AWS 區域，您可以執行下列動作：
+ 在新的 `read-replica-1`中建立 AWS 區域，指定 `source-instance-1`做為來源。
+ 從 `read-replica-2` 建立 `read-replica-1`。
+ 從 `read-replica-3` 建立 `read-replica-1`。

在此範例中，您只需要為從 `source-instance-1` 傳輸到 `read-replica-1` 的資料付費。從 `read-replica-1` 傳輸至其他另兩個僅供讀取複本的資料，因為位於相同 AWS 區域中，因無需付費。如果您直接從另一個複本`source-instance-1`建立這三個複本 AWS 區域，則會向您收取資料傳輸到所有三個複本的費用。