本頁面說明如何複製執行個體。
總覽
複製 Cloud SQL 執行個體會建立新的執行個體,該執行個體是來源執行個體的副本。新執行個體完全獨立於來源執行個體。
常見問題
| 問題 | 答案 | 
|---|---|
| 複製是否會影響效能? | 不會。複製作業不會對來源執行個體造成效能影響。 | 
| 備份會複製到新執行個體嗎? | 不會。新執行個體會建立新的自動備份。手動備份不會從來源執行個體複製。 | 
| 新執行個體是否具有相同的 IP 位址? | 不會。新執行個體會有新的 IP 位址。 | 
| 新執行個體是否具有相同的設定? | 可以。新執行個體會沿用相同的設定,例如資料庫標記、連線選項、機器類型,以及儲存空間和記憶體設定。 | 
| 複本是否會複製到新執行個體? | 否。您需要為新執行個體建立新的副本。 | 
| 可以複製備用資源嗎? | 不行,您無法複製備用資源。 | 
| 可以從過去時間點複製資料嗎? | 可以。 時間點復原功能會使用複製作業,將執行個體還原至較早的時間點。這有助於您在發生破壞性事件時復原資料庫。 | 
| 來源執行個體的維護設定是否會自動複製到複製執行個體? | 否。您需要為複製執行個體設定維護設定。 | 
| 可以複製曾是副本的執行個體嗎? | 可以。您可以複製從其他執行個體複製而來的執行個體。 | 
| 資料庫使用者是否會複製到新執行個體? | 可以,但系統不會複製資料庫使用者密碼,因此需要重新建立。 | 
複製執行個體
您可以使用 Google Cloud 控制台、gcloud CLI、Terraform 或 API 複製 Cloud SQL 執行個體。
控制台
- 
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。 
- 找出要複製的執行個體列。
- 在「動作」欄中,按一下「更多動作」選單 。
- 按一下 [建立本機複本]。
- 在「建立本機複本」頁面中,視需要更新執行個體 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 資源
套用變更
如要在 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 
- 
             執行下列指令,並在提示中輸入 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 回應:
如果您使用 preferredZone 和 preferredSecondaryZone 參數,則適用下列條件:
- 主要和次要可用區都必須是有效區域。
- 兩個可用區必須與來源執行個體位於相同區域。
- 主要和次要可用區不得相同。
- 對於區域執行個體,您無法使用 preferredSecondaryZone參數。否則執行個體複製程序就會失敗。
- 如未指定 preferredZone或preferredSecondaryZone參數的值,複製的執行個體會與來源執行個體使用相同的主要和次要區域。
如要使用 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 回應:
如果您使用 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 範圍,且來源執行個體並非使用指定範圍建立。因此,複製的執行個體會建立在隨機範圍內。 使用  |