複製執行個體

本頁面說明複製功能,以及如何複製執行個體。

總覽

複製 Cloud SQL 執行個體時,系統會建立新的執行個體,做為來源執行個體的副本。新執行個體與來源執行個體完全獨立。

標準本機副本

標準複製會建立來源執行個體的完整備份。然後,執行個體會使用該備份佈建新的獨立執行個體。新執行個體是來源在作業開始時的功能獨立副本。標準複製作業的時間長度與資料庫大小成正比。

常見問題

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

複製執行個體

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

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 找出要複製的執行個體所在資料列。
  3. 在「動作」欄中,按一下「更多動作」選單 。
  4. 按一下 [建立本機複本]。
  5. 在「Create a clone」(建立複製版本) 頁面中,視需要更新執行個體 ID,然後按一下「Create clone」(建立複製版本),並保留「Clone 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 和 cloudsql.instances.create 權限。如要進一步瞭解執行 gcloud CLI 指令所需的權限,請參閱「Cloud SQL 權限」。

Terraform

如要複製執行個體,請使用 Terraform 資源

resource "google_sql_database_instance" "clone" {
  name             = "sqlserver-instance-clone-name"
  region           = "us-central1"
  database_version = "SQLSERVER_2017_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  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 控制台的使用者介面中,前往資源頁面,確認 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 或專案編號,該專案包含來源和目的地執行個體。
  • 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 和 cloudsql.instances.create 權限。如要進一步瞭解使用 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 和 cloudsql.instances.create 權限。如要進一步瞭解使用 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 和 cloudsql.instances.create 權限。如要進一步瞭解執行 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 和 cloudsql.instances.create 權限。如要進一步瞭解使用 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 和 cloudsql.instances.create 權限。如要進一步瞭解使用 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 的執行個體」。