本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
複製 Amazon Aurora 資料庫叢集的一個磁碟區
透過使用 Aurora 複製,您可以建立最初與原始叢集共用相同資料頁面,但為個別且獨立磁碟區的新叢集。該程序旨在快速且具有成本效益。與其相關聯的資料磁碟區新叢集稱為複製。與使用不同的技術 (如還原快照) 以物理方式複製資料相比,建立複製更快也更節省空間。
主題
Aurora 複製的概觀
Aurora 使用寫入時複製通訊協定來建立複製。此機制會使用最少的其他空間來建立初始複製。首次建立複製時,Aurora 會保留來源 Aurora 資料庫叢集和新 (複製) Aurora 資料庫叢集所使用的資料單一副本。只有在來源 Aurora 資料庫叢集或 Aurora 資料庫叢集複製 (在 Aurora 儲存磁碟區上) 變更資料時,才會配置其他的儲存體。若要進一步了解寫入時複製通訊協定,請參閱 Aurora 複製的運作方法。
Aurora 複製對於使用您的生產資料快速設定測試環境特別有用,且不會造成資料損毀風險。您可以為許多類型的應用程式使用複製,例如以下類型:
-
潛在變更實驗 (例如結構描述變更和參數群組變更),以評估所有影響。
-
執行工作負載密集的操作,例如在複製上匯出資料或執行分析查詢。
-
為了開發、測試或其他用途建立生產資料庫叢集的副本。
您可以從同一個 Aurora 資料庫叢集建立多個複製。您也可以從另一個複製建立多個複製。
在建立 Aurora 複製之後,您可以將 Aurora 資料庫執行個體設定為與來源 Aurora 資料庫叢集不同。例如,您可能不需要出於開發目的的複製,來滿足與來源生產 Aurora資料庫叢集相同的高可用性需求。在此情況下,您可以使用單一 Aurora 資料庫執行個體來設定複製,而不是利用 Aurora 資料庫叢集所用的多個資料庫執行個體來設定。
在您使用與來源不同的方部署組態建立複製時,會使用來源之 Aurora DB 引擎的最新次要版本建立複製。
在您從 Aurora 資料庫叢集建立複製時,該複製會建立在您的 AWS 帳戶 (即與擁有來源 Aurora 資料庫叢集相同的帳戶) 中。然而,您也可以與其他 AWS 帳戶共用 Aurora Serverless v2 和已佈建的 Aurora 資料庫叢集和複製。如需更多詳細資訊,請參閱 使用 AWS RAM 和 Amazon Aurora 進行跨帳戶複製。
在您完成使用複製來進行測試、開發或其他用途時,便可將其刪除。
Aurora 複製的限制
Aurora 複製限制如下:
-
您可以根據需要建立數量不拘的複製項,最多可達到 AWS 區域 中允許的資料庫叢集數量上限。
-
您可以使用寫入時複製通訊協定建立最多 15 個複製。在具有 15 個複製項之後,下一個您建立的複製項為完整複本。完整複製通訊協定的作用類似於時間點復原。
-
您無法在與來源 Aurora 資料庫叢集不同的 AWS 區域中建立複製項。
-
您無法從沒有平行查詢功能的 Aurora 資料庫叢集建立一個複製到使用平行查詢的叢集中。若要將資料引入使用平行查詢的叢集,請建立原始叢集的快照,然後將其還原到使用平行查詢功能的叢集。
-
您無法從沒有資料庫執行個體的 Aurora 資料庫叢集中建立複製。您僅能複製至少具有一個資料庫執行個體的 Aurora 資料庫叢集。
-
您可以在與 Aurora 資料庫叢集不同的 Virtual Private Cloud (VPC) 中建立複製。不過,VPC 中的子網路必須映射至相同的可用區域。
-
您可以從已佈建的 Aurora 資料庫叢集中建立 Aurora 已佈建複製。
-
具有 Aurora Serverless v2 執行個體的叢集遵循與佈建叢集相同的規則。
-
在 Aurora Serverless v1 中:
-
您可以從 Aurora Serverless v1 資料庫叢集建立已佈建的複製。
-
您可以從 Aurora Serverless v1 或已佈建的資料庫叢集建立 Aurora Serverless v1 複製。
-
您無法從未加密的已佈建 Aurora 資料庫叢集中建立 Aurora Serverless v1 複製。
-
跨帳戶複製目前佈支援複製 Aurora Serverless v1 資料庫叢集。如需更多詳細資訊,請參閱 跨帳戶複製的限制。
-
複製的 Aurora Serverless v1 資料庫叢集具有與任何 Aurora Serverless v1 資料庫叢集相同的行為和限制。如需更多詳細資訊,請參閱 使用 Amazon Aurora Serverless v1。
-
Aurora Serverless v1 資料庫叢集一律會加密。在您複製 Aurora Serverless v1 資料庫叢集至已佈建的 Aurora 資料庫叢集中時,已佈建的 Aurora 資料庫叢集會加密。您可以選擇加密金鑰,但無法停用加密。若要從已佈建的 Aurora 資料庫叢集複製至 Aurora Serverless v1,您必須先從已佈建已加密且佈建的 Aurora 資料庫叢集開始。
-
Aurora 複製的運作方法
Aurora 複製會在 Aurora 資料庫叢集的儲存層運作。其會使用寫入時複製通訊協定,在支援 Aurora 儲存磁碟區的基礎耐用媒體方面,既快速又節省空間。您可以在 Amazon Aurora 儲存體的概觀 中進一步了解 Aurora 叢集磁碟區。
了解寫入時複製通訊協定
Aurora 資料庫叢集會將資料儲存在基礎 Aurora 儲存磁碟區的頁面中。
例如,在以下圖表中,您可以找到具有 4 個資料頁面 (1、2、3 和 4) 的 Aurora資料庫叢集 (A)。想像一下,複製 B 是從 Aurora資料庫叢集建立。建立複製時,不會複製任何資料。相反地,複製會指向與來源 Aurora 資料庫叢集相同的一組頁面。
在建立複製時,通常不需要其他的儲存空間。寫入時複製通訊協定會使用與實體儲存媒體上相同的區段,作為來源區段。只有在來源區段的容量不足以容納整個複製區段時,才需要其他的儲存空間。如果是這種情況,來源區段會複製到另一個實體裝置上。
在下圖中,您可以找到使用相同叢集 A 及其複製 B 之動作的寫入時複製通訊協定範例,如上所示。假設您變更 Aurora 資料庫叢集 (A),導致第 1 頁保留的資料變更。Aurora 不會寫入至原始第 1 頁,而是建立新的第 1 頁 [A]。叢集 (A) 的 Aurora 資料庫叢集磁碟區現在會指向第 1 頁 [A]、2、3 和 4 頁,而複製 (B) 仍會參考原始頁面。
至於複製上,已對儲存磁碟區上的第 4 頁進行變更。Aurora 不會寫入至原始第 4 頁,而是建立新的第 4 頁 [B]。複製現在會指向第 1、2、3 和 4 頁 [B],而叢集 (A) 會繼續指向 1 [A]、2、3 和 4。
隨著來源 Aurora 資料庫叢集磁碟區和複製在一段時間後發生更多變更,您需要不斷增加更多的儲存空間來擷取並存放變更。
刪除來源叢集磁碟區
最初,複製磁碟區與建立複製的原始磁碟區共用相同的資料頁面。只要原始磁碟區存在,複製磁碟區只會被視為建立或修改複製之頁面的擁有者。因此,複製磁碟區的 VolumeBytesUsed 指標會從小處開始,並且只會隨著原始叢集與複製之間的資料差異而成長。對於來源磁碟區和複製之間的頁面,儲存費用僅適用於原始叢集。如需關於 VolumeBytesUsed 指標的詳細資訊,請參閱Amazon Aurora 的叢集層級指標。
在您刪除具有一個或多個與其相關聯複製的來源叢集磁碟區時,複製的叢集磁碟區中的資料不會變更。Aurora 會保留先前由來源叢集磁碟區擁有的頁面。Aurora 會重新分配已刪除叢集所擁有之頁面的儲存體計費。例如,假設原始叢集有兩個複製,然後刪除原始叢集。原始叢集擁有的一半資料頁面現在將由一個複製擁有。另一半的頁面將由另一個複製擁有。
如果您刪除原始叢集,則在建立或刪除更多複製時,Aurora 會繼續在共用相同頁面的所有複製之間重新分配資料頁面的擁有權。因此,您可能會發現複製叢集磁碟區的 VolumeBytesUsed 指標值變更。隨著建立更多複製,且頁面擁有權分散到更多叢集,指標值可能會減少。刪除複製並將頁面擁有權指派給較少數量的叢集時,指標值也會增加。如需寫入操作如何影響複製磁碟區上資料頁面的資訊,請參閱 了解寫入時複製通訊協定。
當原始叢集和複製由相同AWS帳戶擁有時,這些叢集的所有儲存費用都會套用至該相同 AWS 帳戶。如果某些叢集是跨帳戶複製,刪除原始叢集可能會對擁有跨帳戶複製的 AWS 帳戶產生額外的儲存費用。
例如,假設叢集磁碟區在您建立任何複製之前有 1000 個已使用的資料頁面。當您複製該叢集時,複製磁碟區一開始使用的頁面為零。如果複製對 100 個資料頁面進行修改,則只會將這 100 個頁面存放在複製磁碟區並標記為已使用。兩個叢集會共用父磁碟區中的其他 900 個未變更頁面。在此情況下,父叢集會有 1000 頁的儲存費用,以及 100 頁的複製磁碟區費用。
如果您刪除來源磁碟區,複製的儲存費用會包含其變更的 100 頁,以及原始磁碟區的 900 個共用頁面,總共 1000 頁。
建立 Amazon Aurora 複製
您可以在相同的 AWS 帳戶中建立複製,作為來源 Aurora 資料庫叢集。若要執行此操作,您可以使用 AWS 管理主控台 或 AWS CLI,並依下列程序進行。
若要允許另一個 AWS 帳戶來建立複製,或與其他 AWS 帳戶共享,請使用 使用 AWS RAM 和 Amazon Aurora 進行跨帳戶複製 中的程序。
以下程序說明如何使用 複製 AWS 管理主控台 來複製 Aurora 資料庫叢集。
在 Aurora 資料庫叢集中搭配使用 AWS 管理主控台 結果與一個 Aurora 資料庫執行個體,以建立複製。
這些說明適用於與建立複製 AWS 帳戶相同帳戶所擁有的資料庫叢集。若資料庫叢集是由不同 AWS 帳戶擁有,請改為參閱使用 AWS RAM 和 Amazon Aurora 進行跨帳戶複製。
使用 AWS 建立由您 AWS 管理主控台 帳戶所擁有資料庫叢集的複製
登入 AWS 管理主控台,開啟位於 https://console.aws.amazon.com/rds/
的 Amazon RDS 主控台。 在導覽窗格中,選擇 Databases (資料庫)。
從清單中選擇您的 Aurora 資料庫叢集,並為 Actions (動作),選擇 Create clone (建立複製)。
「建立複製」頁面即會開啟,您可以在其中設定 Aurora 資料庫叢集複製的設定、連線能力和其他選項。
-
對於資料庫執行個體識別符,請輸入您要給予所複製 Aurora 資料庫叢集的名稱。
對於 Aurora Serverless v1 資料庫叢集,針對容量類型選擇已佈建或無伺服器。
僅在來源 Aurora 資料庫叢集為 Aurora Serverless v1 資料庫叢集,或為已加密之已佈建 Aurora 資料庫叢集時,才可選擇 Serverless (無伺服器)。
-
對於 Aurora Serverless v2 或已佈建的資料庫叢集,針對叢集儲存組態選擇 Aurora I/O-Optimized 或 Aurora Standard。
如需更多詳細資訊,請參閱 Amazon Aurora 資料庫叢集的儲存組態。
-
選擇資料庫執行個體大小或資料庫叢集容量:
-
對於已佈建的複製,選擇資料庫執行個體類別。
您可以接受提供的設定,也可以為您的複製使用不同的資料庫執行個體類別。
-
針對 Aurora Serverless v1 或 Aurora Serverless v2 複製,選擇容量設定。
您可以接受提供的設定,也可以為您的複製變更設定。
-
-
視需要為您的複製選擇其他設定。若要進一步了解 Aurora 資料庫叢集和執行個體設定,請參閱 建立 Amazon Aurora 資料庫叢集。
-
選擇建立複製。
在建立複製時,其會與您其他的 Aurora 資料庫叢集一起列於主控台的 Databases (資料庫) 區段中,並顯示其目前狀態。在您複製的狀態為 Available (可用) 時,表示已可使用。
使用 AWS CLI 複製您的 Aurora 資料庫叢集涉及建立複製叢集,並將一或多個資料庫執行個體新增至其中的幾個步驟。
您使用的 restore-db-cluster-to-point-in-time AWS CLI 命令會產生 Aurora 資料庫叢集,其儲存資料與原始叢集相同,但沒有 Aurora 資料庫執行個體。複製可用後,您可以分別建立資料庫執行個體。您可以選擇資料庫執行個體數量及其執行個體類別,讓複製的運算容量比原始叢集更多或更少。程序的步驟如下:
-
透過使用 restore-db-cluster-to-point-in-time CLI 命令來建立複製。
-
使用 create-db-instance CLI 命令建立複製的寫入器資料庫執行個體。
-
(選用) 執行其他 create-db-instance CLI 命令,將一或多個讀取器執行個體新增至複製叢集。使用讀取器執行個體有助於改善複製的高可用性和讀取可擴展性方面。如果您只打算使用複製進行開發和測試,可以略過此步驟。
建立複製
使用 restore-db-cluster-to-point-in-time CLI 命令來建立初始複製叢集。
若要從來源 Aurora 資料庫叢集建立複製
-
使用
restore-db-cluster-to-point-in-timeCLI 命令。指定下列參數的值。在此典型情況下,複製會使用與原始叢集相同的引擎模式,無論是已佈建或 Aurora Serverless v1。-
--db-cluster-identifier– 為您的複製選擇一個有意義的名稱。在您使用 restore-db-cluster-to-point-in-time CLI 命令時,為複製命名。然後,您會在 create-db-instance CLI 命令中傳遞複製的名稱。 -
--restore-type– 使用copy-on-write來建立來源資料庫叢集的複製。如果沒有這個參數,restore-db-cluster-to-point-in-time會還原 Aurora 資料庫叢集,而非建立複製。 -
--source-db-cluster-identifier– 使用您要複製之來源 Aurora 資料庫叢集的名稱。 -
--use-latest-restorable-time– 此值會指向來源資料庫叢集的最新可還原磁碟區資料。使用它來建立複製。
-
下列範例會從名為 my-source-cluster 的叢集建立名為 my-clone 的複製。
對於 Linux、macOS 或 Unix:
aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifiermy-source-cluster\ --db-cluster-identifiermy-clone\ --restore-type copy-on-write \ --use-latest-restorable-time
在 Windows 中:
aws rds restore-db-cluster-to-point-in-time ^ --source-db-cluster-identifiermy-source-cluster^ --db-cluster-identifiermy-clone^ --restore-type copy-on-write ^ --use-latest-restorable-time
該命令會返回包含複製詳細資訊的 JSON 對象。在嘗試為複製建立資料庫執行個體之前,請檢查以確定您複製的資料庫叢集是否可用。如需更多詳細資訊,請參閱 檢查狀態並取得複製詳細資訊。
例如,假設您有一個想要複製的叢集名為 tpch100g。下列 Linux 範例會為新叢集建立名為 tpch100g-clone 的複製叢集、名為 tpch100g-clone-instance 的 Aurora Serverless v2 寫入器執行個體,以及名為 tpch100g-clone-instance-2 的已佈建讀取器執行個體。
您不需要提供部分參數,例如 --master-username 和 --master-user-password。Aurora 會自動從原始叢集中判斷這些參數。您確實需要指定要使用的資料庫引擎。因此,此範例會測試新叢集,以判斷 --engine 參數所要使用的正確值。
此範例也包含建立複製叢集時的 --serverless-v2-scaling-configuration 選項。如此一來,即使原始叢集未使用 Aurora Serverless v2,您也可以將 Aurora Serverless v2 執行個體新增至複製。
$aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifier tpch100g \ --db-cluster-identifier tpch100g-clone \ --serverless-v2-scaling-configuration MinCapacity=0.5,MaxCapacity=16\ --restore-type copy-on-write \ --use-latest-restorable-time$aws rds describe-db-clusters \ --db-cluster-identifier tpch100g-clone \ --query '*[].[Engine]' \ --output textaurora-mysql$aws rds create-db-instance \ --db-instance-identifier tpch100g-clone-instance \ --db-cluster-identifier tpch100g-clone \ --db-instance-class db.serverless \ --engine aurora-mysql$aws rds create-db-instance \ --db-instance-identifier tpch100g-clone-instance-2 \ --db-cluster-identifier tpch100g-clone \ --db-instance-class db.r6g.2xlarge \ --engine aurora-mysql
建立與來源 Aurora 資料庫叢集不同的引擎類型複製。
-
此程序僅適用於支援 Aurora Serverless v1 的較舊引擎版本。假設您擁有 Aurora Serverless v1 叢集,而且想要建立屬於已佈建叢集的複製。在這種情況下,請使用
restore-db-cluster-to-point-in-timeCLI 命令,並指定與先前範例中類似參數值的值,加上下列其他參數:-
--engine-mode– 只能使用此參數來建立與來源 Aurora 資料庫叢集不同引擎模式的複製。此參數僅適用於支援 Aurora Serverless v1 的較舊引擎版本。選擇要與以下--engine-mode一起傳遞的值:-
使用
--engine-mode provisioned從 Aurora Serverless 資料庫叢集建立已佈建的 Aurora 資料庫叢集複製。注意
如果您想要搭配從 Aurora Serverless v1 複製的叢集使用 Aurora Serverless v2,您仍然會將複製的引擎模式指定為
provisioned。接著您會執行額外的升級和遷移步驟。 -
使用
--engine-mode serverless從已佈建的 Aurora 資料庫叢集建立 Aurora Serverless v1 複製。在您指定serverless引擎模式時,也可以選擇--scaling-configuration。
-
-
--scaling-configuration– (選用) 與--engine-mode serverless搭配使用,以設定 Aurora Serverless v1 複製的容量下限和上限。如果您不使用此參數,Aurora 會使用資料庫引擎的預設 Aurora Serverless v1 容量值來建立 Aurora Serverless v1 複製。
-
以下範例會從名為 my-source-cluster 的 Aurora Serverless v1 資料庫叢集來建立名為 my-clone 的已佈建複製。
對於 Linux、macOS 或 Unix:
aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifiermy-source-cluster\ --db-cluster-identifiermy-clone\ --engine-mode provisioned \ --restore-type copy-on-write \ --use-latest-restorable-time
在 Windows 中:
aws rds restore-db-cluster-to-point-in-time ^ --source-db-cluster-identifiermy-source-cluster^ --db-cluster-identifiermy-clone^ --engine-mode provisioned ^ --restore-type copy-on-write ^ --use-latest-restorable-time
這些命令會返回 JSON 對象,其會包含您需要用來建立資料庫執行個體的複製。在複製的狀態 (空白 Aurora 資料庫叢集) 的狀態為 可用 (Available) 之前,您無法執行該操作。
注意
restore-db-cluster-to-point-in-time AWS CLI 命令只會還原資料庫叢集,而不會還原該資料庫叢集的資料庫執行個體。若要為已還原的資料庫叢集建立資料庫執行個體,請執行 create-db-instance 命令。使用該命令,您可以將還原的資料庫叢集識別符指定為 --db-cluster-identifier 參數。只在 restore-db-cluster-to-point-in-time 命令完成且資料庫叢集可用時,您才能建立資料庫執行個體。
假設您從 Aurora Serverless v1 叢集開始,並打算將其遷移至 Aurora Serverless v2 叢集。您可以建立Aurora Serverless v1 叢集的已佈建複製,做為遷移中的初始步驟。如需完整程序,包括任何必要的版本升級,請參閱 從 Aurora Serverless v1 叢集升級至 Aurora Serverless v2。
檢查狀態並取得複製詳細資訊
您可以使用下列命令,來檢查您新建立之複製叢集的狀態。
$aws rds describe-db-clusters --db-cluster-identifiermy-clone--query '*[].[Status]' --output text
或者,您可以使用以下 AWS CLI 查詢,來取得您建立複製的資料庫執行個體時所需的狀態和其他值。
對於 Linux、macOS 或 Unix:
aws rds describe-db-clusters --db-cluster-identifiermy-clone\ --query '*[].{Status:Status,Engine:Engine,EngineVersion:EngineVersion,EngineMode:EngineMode}'
在 Windows 中:
aws rds describe-db-clusters --db-cluster-identifiermy-clone^ --query "*[].{Status:Status,Engine:Engine,EngineVersion:EngineVersion,EngineMode:EngineMode}"
此查詢會返回類似以下的內容:
[ { "Status": "available", "Engine": "aurora-mysql", "EngineVersion": "8.0.mysql_aurora.3.04.1", "EngineMode": "provisioned" } ]
建立您複製的 Aurora 資料庫執行個體
使用 create-db-instance CLI 命令來建立您的 Aurora Serverless v2 或已佈建複製的資料庫執行個體。您不會為 Aurora Serverless v1 複製建立資料庫執行個體。
資料庫執行個體會從來源資料庫叢集繼承 --master-username 和 --master-user-password 屬性。
下列範例會建立已佈建複製的資料庫執行個體。
對於 Linux、macOS 或 Unix:
aws rds create-db-instance \ --db-instance-identifiermy-new-db\ --db-cluster-identifiermy-clone\ --db-instance-classdb.r6g.2xlarge\ --engine aurora-mysql
在 Windows 中:
aws rds create-db-instance ^ --db-instance-identifiermy-new-db^ --db-cluster-identifiermy-clone^ --db-instance-classdb.r6g.2xlarge^ --engine aurora-mysql
下列範例會為使用支援 Aurora Serverless v2 之引擎版本的複製建立 Aurora Serverless v2 資料庫執行個體。
對於 Linux、macOS 或 Unix:
aws rds create-db-instance \ --db-instance-identifiermy-new-db\ --db-cluster-identifiermy-clone\ --db-instance-class db.serverless \ --engine aurora-postgresql
在 Windows 中:
aws rds create-db-instance ^ --db-instance-identifiermy-new-db^ --db-cluster-identifiermy-clone^ --db-instance-class db.serverless ^ --engine aurora-mysql
用於複製的參數
下表摘要說明與 restore-db-cluster-to-point-in-time 搭配使用以複製 Aurora 資料庫叢集的各種參數。
| 參數 | 描述 |
|---|---|
|
|
使用您要複製之來源 Aurora 資料庫叢集的名稱。 |
|
|
當您使用 |
|
|
指定 |
|
|
此值會指向來源資料庫叢集的最新可還原磁碟區資料。使用它來建立複製。 |
|
|
(支援 Aurora Serverless v2 的較新版本) 使用此參數來設定 Aurora Serverless v2 複製的最小和最大容量。如果您未指定此參數,則在修改叢集以新增此屬性之前,您無法在複製叢集中建立任何 Aurora Serverless v2 執行個體。 |
|
|
(僅支援 Aurora Serverless v1 的舊版本) 使用此參數建立與來源 Aurora 資料庫叢集不同類型的複製,並具有下列其中一個值:
|
|
|
(僅支援 Aurora Serverless v1 的舊版本) 使用此參數來設定 Aurora Serverless v1 複製的最小和最大容量。如果您不指定此參數,Aurora 會使用資料庫引擎的預設容量值來建立複製。 |
如需跨 VPC 和跨帳戶複製的資訊,請參閱下列各節。