本頁面說明複製功能,並說明如何複製執行個體。
總覽
複製 Cloud SQL 執行個體會建立新執行個體,也就是來源執行個體的副本。新執行個體與來源執行個體完全獨立。
常見問題
問題 | 回答 |
---|---|
複製是否會影響效能? | 不會。複製作業不會對來源執行個體的效能造成影響。 |
備份是否會複製到新的執行個體? | 不會。新執行個體會建立新的自動備份。系統不會從來源執行個體複製手動備份。 |
新執行個體是否使用相同的 IP 位址? | 不會。新執行個體會有新的 IP 位址。 |
新執行個體是否具有相同的設定? | 可以,新執行個體具有相同的設定,例如資料庫標記、連線選項、機器類型,以及儲存空間和記憶體設定。 |
副本是否已複製到新執行個體? | 否。您需要為新執行個體建立新的複本。 |
您可以複製備用資源嗎? | 不行,您無法複製備用資源。 |
您可以從較早的時間點複製資料嗎? | 可以, 時間點復原功能會使用複製功能,從較早時間點還原執行個體。這有助於您在資料庫遭到破壞的情況下進行復原。 |
來源執行個體的維護設定是否會自動複製到複本執行個體? | 否。您需要為複本執行個體設定維護設定。 |
當執行個體的區域無法使用時,您是否可以複製執行個體? | 可以,如果複製區域執行個體,您可以為該執行個體指定不同的主要可用區。如果複製高可用性 (區域) 執行個體,您可以為執行個體指定不同的主要和次要可用區。 |
您可以將資料庫複製到其他專案嗎? | 不行。您無法將資料庫複製到其他專案。 |
您可以複製曾經是複本的執行個體嗎? | 可以,您可以複製從其他執行個體複製的執行個體。 |
資料庫使用者是否已複製到新執行個體? | 是,資料庫使用者會複製到新執行個體。系統也會複製這些使用者的密碼,因此不需要重新建立。 |
複製執行個體
您可以使用 Google Cloud 控制台、gcloud CLI、Terraform 或 API 複製 Cloud SQL 執行個體。
控制台
-
前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。
- 找出要複製的執行個體列。
- 在「動作」欄中,按一下 「更多動作」選單。
- 按一下 [建立本機複本]。
- 在「Create a clone」頁面中,視需要更新執行個體 ID,然後按一下「Create clone」,並保留「Clone the current state of instance」選取狀態。
複本初始化時,您會返回執行個體清單頁面。
gcloud
如要複製執行個體,請使用 gcloud sql instances clone
指令:
gcloud sql instances clone SOURCE_INSTANCE_NAME DESTINATION_INSTANCE_NAME \ --project PROJECT_ID \ --preferred-zone ZONE_NAME \ --preferred-secondary-zone SECONDARY_ZONE_NAME
請將以下項目改為對應的值:
- SOURCE_INSTANCE_NAME:要複製的 Cloud SQL 執行個體名稱。
- DESTINATION_INSTANCE_NAME:複製的執行個體名稱。
- PROJECT_ID:包含來源和目的地執行個體的 Google Cloud 專案 ID 或專案號碼。
- ZONE_NAME:選用。目的地執行個體的主要區域名稱。如果您希望目的地執行個體位於與要複製的 Cloud SQL 執行個體不同的主要區域,請使用此選項。對於區域執行個體,這個區域會取代主要區域,但次要區域會與來源執行個體相同。
- SECONDARY_ZONE_NAME:選用。目的地執行個體的次要區域名稱。您可以使用這項參數,為要複製的區域 Cloud SQL 執行個體指定不同的次要可用區。
如果您使用 --preferred-zone
和 --preferred-secondary-zone
參數,則適用下列條件:
- 主要和次要可用區都必須是有效的區域。
- 兩個區域都必須與來源執行個體位於相同地區。
- 主要和次要可用區不得相同。
- 對於區域執行個體,您無法使用
--preferred-secondary-zone
參數。否則,執行個體的複製程序就會失敗。 - 如果您未指定
--preferred-zone
或--preferred-secondary-zone
參數的值,則複製的執行個體會與來源執行個體使用相同的主要和次要區域。
如要執行 gcloud sql instances clone
指令,您必須具備 cloudsql.instances.clone
權限。如要進一步瞭解執行 gcloud CLI 指令所需的權限,請參閱「Cloud SQL 權限」。
Terraform
如要複製執行個體,請使用 Terraform 資源
套用變更
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。
準備 Cloud Shell
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。
準備目錄
每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。
-
在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含
.tf
副檔名,例如main.tf
。在本教學課程中,檔案稱為main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您正在參考教學課程,可以複製各個章節或步驟中的程式碼範例。
將範例程式碼複製到新建立的
main.tf
中。您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。
- 查看並修改要套用至環境的範例參數。
- 儲存變更。
-
初始化 Terraform。這項操作只需對每個目錄執行一次。
terraform init
如要使用最新版的 Google 供應器,請視需要加入
-upgrade
選項:terraform init -upgrade
套用變更
-
檢查設定,並確認 Terraform 要建立或更新的資源是否符合您的預期:
terraform plan
視需要修正設定。
-
執行下列指令,並在提示中輸入
yes
,即可套用 Terraform 設定:terraform apply
等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。
- 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
刪除變更
如要刪除變更,請按照下列步驟操作:
- 如要停用防刪除功能,請在 Terraform 設定檔中將
deletion_protection
引數設為false
。deletion_protection = "false"
- 執行下列指令,並在提示中輸入
yes
,即可套用更新的 Terraform 設定:terraform apply
-
如要移除先前透過 Terraform 設定套用的資源,請執行下列指令,並在提示中輸入
yes
:terraform destroy
REST v1
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含來源和目的地執行個體的 Google Cloud 專案 ID 或專案號碼。
- SOURCE_INSTANCE_NAME:要複製的 Cloud SQL 執行個體名稱。
- DESTINATION_INSTANCE_NAME:複製的執行個體名稱。
- ZONE_NAME:選用。目的地執行個體的主要區域名稱。如果您希望目的地執行個體位於與要複製的 Cloud SQL 執行個體不同的主要區域,請使用此選項。對於區域執行個體,這個區域會取代主要區域,但次要區域會與來源執行個體相同。
- SECONDARY_ZONE_NAME:選用。目的地執行個體的次要區域名稱。您可以使用這項參數,為要複製的區域 Cloud SQL 執行個體指定不同的次要可用區。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone
JSON 要求主體:
{ "cloneContext": { "destinationInstanceName": "DESTINATION_INSTANCE_NAME", "preferredZone": "ZONE_NAME", "preferredSecondaryZone": "SECONDARY_ZONE_NAME" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
如果您使用 preferredZone
和 preferredSecondaryZone
參數,則適用下列條件:
- 主要和次要可用區都必須是有效的區域。
- 兩個區域都必須與來源執行個體位於相同地區。
- 主要和次要可用區不得相同。
- 對於區域執行個體,您無法使用
preferredSecondaryZone
參數。否則,執行個體的複製程序就會失敗。 - 如果您未指定
preferredZone
或preferredSecondaryZone
參數的值,則複製的執行個體會與來源執行個體使用相同的主要和次要區域。
如要使用 instances.clone
API 方法,您必須具備 cloudsql.instances.clone
權限。如要進一步瞭解使用 API 方法所需的權限,請參閱「Cloud SQL 權限」。
REST v1beta4
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:包含來源和目的地執行個體的 Google Cloud 專案 ID 或專案號碼。
- SOURCE_INSTANCE_NAME:要複製的 Cloud SQL 執行個體名稱。
- DESTINATION_INSTANCE_NAME:複製的執行個體名稱。
- ZONE_NAME:選用。目的地執行個體的主要區域名稱。如果您希望目的地執行個體位於與要複製的 Cloud SQL 執行個體不同的主要區域,請使用此選項。對於區域執行個體,這個區域會取代主要區域,但次要區域會與來源執行個體相同。
- SECONDARY_ZONE_NAME:選用。目的地執行個體的次要區域名稱。您可以使用這項參數,為要複製的區域 Cloud SQL 執行個體指定不同的次要可用區。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone
JSON 要求主體:
{ "cloneContext": { "destinationInstanceName": "DESTINATION_INSTANCE_NAME", "preferredZone": "ZONE_NAME", "preferredSecondaryZone": "SECONDARY_ZONE_NAME" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
如果您使用 preferredZone
和 preferredSecondaryZone
參數,則適用下列條件:
- 主要和次要可用區都必須是有效的區域。
- 兩個區域都必須與來源執行個體位於相同地區。
- 主要和次要可用區不得相同。
- 對於區域執行個體,您無法使用
preferredSecondaryZone
參數。否則,執行個體的複製程序就會失敗。 - 如果您未指定
preferredZone
或preferredSecondaryZone
參數的值,則複製的執行個體會與來源執行個體使用相同的主要和次要區域。
如要使用 instances.clone
API 方法,您必須具備 cloudsql.instances.clone
權限。如要進一步瞭解使用 API 方法所需的權限,請參閱「Cloud SQL 權限」。
複製使用內部 IP 位址的執行個體
如果 Cloud SQL 執行個體使用的是內部 IP 位址,您可以選擇為複本的新 IP 位址指定已分配的 IP 範圍。例如:google-managed-services-default
。
gcloud
複製執行個體,並視需要指定要使用的已分配 IP 範圍:
gcloud sql instances clone SOURCE_INSTANCE_NAME TARGET_INSTANCE_NAME \ --allocated-ip-range-name ALLOCATED_IP_RANGE_NAME
執行 gcloud sql instances clone
指令的使用者或服務帳戶必須具備 cloudsql.instances.clone
權限。如要進一步瞭解執行 gcloud CLI 指令所需的權限,請參閱「Cloud SQL 權限」。
REST v1
複製執行個體,並視需要指定要使用的已分配 IP 範圍:
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- source-instance-id:來源執行個體 ID
- target-instance-id:目標執行個體 ID
- allocated-ip-range-name:已分配 IP 範圍的名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone
JSON 要求主體:
{ "cloneContext": { "destinationInstanceName": "target-instance-id", "allocatedIpRange": "allocated-ip-range-name" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
使用 instances.clone
API 方法的使用者或服務帳戶必須具備 cloudsql.instances.clone
權限。如要進一步瞭解使用 API 方法所需的權限,請參閱「Cloud SQL 權限」。
REST v1beta4
複製執行個體,並視需要指定要使用的已分配 IP 範圍:
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- source-instance-id:來源執行個體 ID
- target-instance-id:目標執行個體 ID
- allocated-ip-range-name:已分配 IP 範圍的名稱
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone
JSON 要求主體:
{ "cloneContext": { "destinationInstanceName": "target-instance-id", "allocatedIpRange": "allocated-ip-range-name" } }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
使用 instances.clone
API 方法的使用者或服務帳戶必須具備 cloudsql.instances.clone
權限。如要進一步瞭解使用 API 方法所需的權限,請參閱「Cloud SQL 權限」。
如果您未指定分配的 IP 範圍,系統會套用以下行為:
- 如果來源執行個體是使用指定範圍建立,則複製的執行個體會在相同範圍內建立。
- 如果來源執行個體並未使用指定範圍建立,則系統會在隨機範圍內建立複製的執行個體。
疑難排解
問題 | 疑難排解 |
---|---|
複製作業失敗,並顯示 constraints/sql.restrictAuthorizedNetworks 錯誤。 |
複製作業遭到 Authorized Networks 設定封鎖。Authorized Networks 會在 Google Cloud 控制台的「連線」部分設定公開 IP 位址,且基於安全考量,不允許複製。請盡可能從 Cloud SQL 執行個體中移除所有 |
錯誤訊息:Failed to create subnetwork. Couldn't find free
blocks in allocated IP ranges. Please allocate new ranges for this service
provider. Help Token: [help-token-id]. |
您嘗試使用 Google Cloud 控制台複製具有私人 IP 位址的執行個體,但未指定要使用的已分配 IP 範圍,且來源執行個體並未使用指定範圍建立。因此,複製的執行個體會在隨機範圍內建立。 使用 |