複製執行個體

本頁面說明如何複製執行個體。

總覽

複製 Cloud SQL 執行個體會建立新的執行個體,該執行個體是來源執行個體的副本。新執行個體完全獨立於來源執行個體。

常見問題

問題 回答
複製是否會影響效能? 不會。複製作業不會對來源執行個體造成效能影響。
備份會複製到新執行個體嗎? 不會。新執行個體會建立新的自動備份。手動備份不會從來源執行個體複製。
新執行個體是否具有相同的 IP 位址? 不會。新執行個體會有新的 IP 位址。
新執行個體是否具有相同的設定? 可以。新執行個體會沿用相同的設定,例如資料庫標記、連線選項、機器類型,以及儲存空間和記憶體設定。
複本是否會複製到新執行個體? 否。您需要為新執行個體建立新的副本。
可以複製備用資源嗎? 不行,您無法複製備用資源。
可以從過去時間點複製資料嗎? 可以。 時間點復原功能會使用複製作業,將執行個體還原至較早的時間點。這有助於您在發生破壞性事件時復原資料庫。
來源執行個體的維護設定是否會自動複製到複製執行個體? 否。您需要為複製執行個體設定維護設定。
可以複製曾是副本的執行個體嗎? 可以。您可以複製從其他執行個體複製而來的執行個體。
資料庫使用者是否會複製到新執行個體? 可以,但系統不會複製資料庫使用者密碼,因此需要重新建立。

複製執行個體

您可以使用 Google Cloud 控制台、gcloud CLI、Terraform 或 API,複製 Cloud SQL 執行個體。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 找出要複製的執行個體列。
  3. 在「動作」欄中,按一下「更多動作」選單
  4. 按一下 [建立本機複本]
  5. 在「建立本機複本」頁面中,視需要更新執行個體 ID,然後按一下「建立本機複本」,並選取「複製執行個體的目前狀態」

    複製作業初始化時,您會返回執行個體清單頁面。

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

請將下列項目改為對應的值:

  • :要複製的 Cloud SQL 執行個體名稱。SOURCE_INSTANCE_NAME
  • 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 資源

resource "google_sql_database_instance" "clone" {
  name             = "mysql-instance-clone-name"
  region           = "us-central1"
  database_version = "MYSQL_8_0"
  clone {
    source_instance_name = google_sql_database_instance.source.id
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

套用變更

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Google Cloud 專案。

    每項專案只需要執行一次這個指令,且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是 .tf,例如 main.tf。在本教學課程中,這個檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在學習教學課程,可以複製每個章節或步驟中的範例程式碼。

    將範例程式碼複製到新建立的 main.tf

    視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您使用這個方法。

  3. 查看並修改範例參數,套用至您的環境。
  4. 儲存變更。
  5. 初始化 Terraform。每個目錄只需執行一次這項操作。
    terraform init

    如要使用最新版 Google 供應商,請加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 檢查設定,確認 Terraform 即將建立或更新的資源符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

刪除變更

如要刪除變更,請按照下列步驟操作:

  1. 如要停用防刪除功能,請在 Terraform 設定檔中將 deletion_protection 引數設為 false
    deletion_protection =  "false"
  2. 執行下列指令,並在提示中輸入 yes,套用更新的 Terraform 設定:
    terraform apply
  1. 執行下列指令,並在提示中輸入 yes,移除先前透過 Terraform 設定套用的資源:

    terraform destroy

REST v1

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:包含來源和目的地執行個體的 Google Cloud 專案 ID 或專案號碼
  • :要複製的 Cloud SQL 執行個體名稱。SOURCE_INSTANCE_NAME
  • 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 回應:

如果您使用 preferredZonepreferredSecondaryZone 參數,則適用下列條件:

  • 主要和次要可用區都必須是有效區域。
  • 兩個可用區必須與來源執行個體位於相同區域。
  • 主要和次要可用區不得相同。
  • 對於區域執行個體,您無法使用 preferredSecondaryZone 參數。否則執行個體複製程序就會失敗。
  • 如未指定 preferredZonepreferredSecondaryZone 參數的值,複製的執行個體會與來源執行個體使用相同的主要和次要區域。

如要使用 instances.clone API 方法,您必須具備 cloudsql.instances.clone 權限。如要進一步瞭解使用 API 方法所需的權限,請參閱 Cloud SQL 權限

REST v1beta4

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:包含來源和目的地執行個體的 Google Cloud 專案 ID 或專案號碼
  • :要複製的 Cloud SQL 執行個體名稱。SOURCE_INSTANCE_NAME
  • 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 回應:

如果您使用 preferredZonepreferredSecondaryZone 參數,則適用下列條件:

  • 主要和次要可用區都必須是有效區域。
  • 兩個可用區必須與來源執行個體位於相同區域。
  • 主要和次要可用區不得相同。
  • 對於區域執行個體,您無法使用 preferredSecondaryZone 參數。否則執行個體複製程序就會失敗。
  • 如未指定 preferredZonepreferredSecondaryZone 參數的值,複製的執行個體會與來源執行個體使用相同的主要和次要區域。

如要使用 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 執行個體中移除所有 Authorized Networks 項目。否則,請建立副本,但不要包含任何 Authorized Networks 項目。

錯誤訊息: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 範圍,且來源執行個體並非使用指定範圍建立。因此,複製的執行個體會建立在隨機範圍內。

使用 gcloud 複製執行個體,並為
--allocated-ip-range-name 參數提供值。詳情請參閱複製具有私人 IP 的執行個體