本頁說明如何使用 SQL 傾印檔案,將資料匯出及匯入 Cloud SQL 執行個體。
事前準備
匯出作業會使用資料庫資源,但除非執行個體資源不足,否則不會干擾正常的資料庫作業。
如需最佳做法,請參閱匯入及匯出資料的最佳做法。
完成匯入作業後,請驗證結果。
從 MySQL 適用的 Cloud SQL 匯出資料
從 MySQL 適用的 Cloud SQL 匯出資料所需的角色和權限
如要將資料從 Cloud SQL 匯出至 Cloud Storage,發起匯出作業的使用者必須具備下列其中一個角色:
- Cloud SQL 編輯者角色
- 自訂角色,包括下列權限:- cloudsql.instances.get
- cloudsql.instances.export
 
此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:
- storage.objectAdminIdentity and Access Management (IAM) 角色
-  自訂角色,包括下列權限:
    - storage.objects.create
- storage.objects.list(僅適用於平行匯出檔案)
- storage.objects.delete(僅適用於平行匯出檔案)
 
如需 IAM 角色相關說明,請參閱「身分與存取權管理」。
從 Cloud SQL for MySQL 匯出至 SQL 傾印檔案
如要建立 SQL 傾印檔案,請將資料從 Cloud SQL 匯出至 Cloud Storage。檔案上傳至 Cloud Storage 後,即可匯入其他 Cloud SQL 資料庫。將這些資料從 Cloud Storage 下載至本機環境之後,您就能直接在本機存取資料。從 Cloud SQL 匯出資料時,會使用 mysqldump 公用程式搭配 --single-transaction 和 --hex-blob 選項。使用 --single-transaction 選項時,mysqldump 會在執行前啟動交易。這樣一來,mysqldump 就能讀取資料庫的目前狀態,而不會鎖定整個資料庫,確保資料傾印作業的一致性。
如果 SQL 傾印檔案包含 DEFINER 子句 (視圖、觸發條件、預存程序等),則視這些陳述式的執行順序而定,使用此檔案匯入可能會失敗。進一步瞭解 Cloud SQL 中的 DEFINER 用法和可能的解決方法。
如要將 Cloud SQL 執行個體資料庫中的資料匯出至 Cloud Storage 值區的 SQL 傾印檔案,請按照下列步驟操作:
控制台
- 
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。 
- 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
- 按一下 [匯出]。
- 在「檔案格式」部分,按一下「SQL」即可建立 SQL 傾印檔案。
- 在「要匯出的資料」部分,按一下「這個執行個體中的一或多個資料庫」,即可匯出特定資料庫。
- 使用下拉式選單選取要匯出的資料庫。
- 在「目的地」部分,選取「瀏覽」,搜尋匯出作業的 Cloud Storage 值區或資料夾。
- 按一下「匯出」即可開始匯出。
gcloud
- 建立 Cloud Storage 值區。
- 找出要匯出資料的 Cloud SQL 執行個體服務帳戶。執行 gcloud sql instances describe指令即可完成這項操作。在輸出內容中尋找serviceAccountEmailAddress欄位。gcloud sql instances describe INSTANCE_NAME 
- 使用 gcloud storage buckets add-iam-policy-binding將storage.objectAdminIAM 角色授予服務帳戶。如需設定 IAM 權限的說明,請參閱「 使用 IAM 權限」。
- 將資料庫匯出至 Cloud Storage bucket:
  
  
  
  
  gcloud sql export sql INSTANCE_NAME gs://BUCKET_NAME/sqldumpfile.gz \ --database=DATABASE_NAME \ --offload export sql指令不含觸發條件或預存程序,但包含檢視畫面。 如要匯出觸發程序和/或預存程序,請使用 mysqldump 工具。如要進一步瞭解如何使用 export sql指令,請參閱sql export sql指令參考資料頁面。
- 如果您不需要保留先前設定的 IAM 角色,請立即撤銷該角色。
REST v1
- 建立匯出的值區:gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME 這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。 
- 為執行個體提供值區的 legacyBucketWriterIAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。
- 匯出資料庫:
  
  
  
    
    
  
  
<使用任何要求資料之前,請先替換以下項目: - PROJECT_ID:專案 ID
- INSTANCE_ID:執行個體 ID
- BUCKET_NAME:Cloud Storage bucket 名稱
- PATH_TO_DUMP_FILE:SQL 傾印檔案的路徑
- DATABASE_NAME_1:Cloud SQL 執行個體內的資料庫名稱
- DATABASE_NAME_2:Cloud SQL 執行個體內的資料庫名稱
 
- 如果您不需要保留先前設定的 IAM 角色,請立即移除。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID/export
JSON 要求主體:
{
 "exportContext":
   {
      "fileType": "SQL",
      "uri": "gs://BUCKET_NAME/PATH_TO_DUMP_FILE",
      "databases": ["DATABASE_NAME"],
      "offload": TRUE | FALSE
    }
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
REST v1beta4
- 建立匯出的值區:gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME 這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。 
- 為執行個體提供值區的 storage.objectAdminIAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。
- 匯出資料庫:
  
  
  
    
    
  
  
<使用任何要求資料之前,請先替換以下項目: - PROJECT_ID:專案 ID
- INSTANCE_ID:執行個體 ID
- BUCKET_NAME:Cloud Storage bucket 名稱
- PATH_TO_DUMP_FILE:SQL 傾印檔案的路徑
- DATABASE_NAME_1:Cloud SQL 執行個體內的資料庫名稱
- DATABASE_NAME_2:Cloud SQL 執行個體內的資料庫名稱
 
- 如果您不需要保留先前設定的 IAM 角色,請立即撤銷該角色。
HTTP 方法和網址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID/export
JSON 要求主體:
{
  "exportContext":
    {
       "fileType": "SQL",
       "uri": "gs://BUCKET_NAME/PATH_TO_DUMP_FILE",
       "databases": ["DATABASE_NAME"],
       "offload": TRUE | FALSE
     }
 }
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
使用 mysqldump 從本機 MySQL 伺服器匯出
如要從內部部署 MySQL 資料庫匯出資料,以便匯入至 Cloud SQL 資料庫,請務必使用 mysqldump 公用程式,並加上下列標記:
- --databases您必須使用- --databases選項指定要匯出的明確資料庫清單,且這份清單「不得」包含- mysql系統資料庫。
- --hex-blob如果您的資料庫包含任何二進位檔欄位,您必須使用此標記來確保正確匯入二進位檔欄位。
- --set-gtid-purged=OFFGTID 資訊不得包含在 SQL 傾印檔案中,SQL 傾印檔案也不應停用二進位檔記錄。(MySQL 5.5 或外部複製不需要)。
- --single-transaction在跑步前啟動交易。這樣一來,mysqldump 就能讀取資料庫的目前狀態,產生一致的資料傾印檔,而不必鎖定整個資料庫。
在指令列中執行 mysqldump:
mysqldump --databases DATABASE_NAME -h INSTANCE_IP -u USERNAME -p \ --hex-blob --single-transaction --set-gtid-purged=OFF \ --default-character-set=utf8mb4 > SQL_FILE.sql
如需 mysqldump 的相關說明,請參閱 
mysqldump 參考資料。
外部複製到 MySQL 適用的 Cloud SQL
如要建立傾印檔案以用於外部伺服器設定,請參閱從外部伺服器複製一文。
將資料匯入 MySQL 適用的 Cloud SQL
匯入至 MySQL 適用的 Cloud SQL 時所需的角色和權限
如要將資料從 Cloud Storage 匯入 Cloud SQL,發起匯入作業的使用者必須具備下列其中一個角色:
- Cloud SQL 管理員角色
- 自訂角色,包括下列權限:- cloudsql.instances.get
- cloudsql.instances.import
 
此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:
- storage.objectAdminIAM 角色
- 自訂角色,包括下列權限:
    - storage.objects.get
- storage.objects.list(僅適用於平行匯入檔案)
 
如需 IAM 角色相關說明,請參閱「身分與存取權管理」。
將 SQL 傾印檔案匯入 MySQL 適用的 Cloud SQL
SQL 檔案是含有一系列 SQL 指令的純文字檔案。
控制台
- 
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。 
- 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
- 按一下「匯入」。
- 在「選擇要從哪個檔案匯入資料」部分,輸入要用於匯入作業的 bucket 和 SQL 傾印檔案路徑,瀏覽至現有檔案,或上傳本機檔案。
  您可以匯入壓縮 ( .gz) 或未壓縮 (.sql) 的檔案。
- 針對 [Format] (格式),選取 [SQL]。
- 選取您要匯入資料的目標資料庫。 - 這樣會使 Cloud SQL 在匯入之前執行 - USE DATABASE陳述式。
- 如要指定使用者執行匯入作業,請選取使用者。 - 如果匯入檔案包含必須由特定使用者執行的陳述式,請使用此欄位指定該使用者。 
- 按一下 [Import] (匯入) 即可開始匯入。
gcloud
- 建立 Cloud Storage bucket。
- 上傳檔案至值區。 - 如需將檔案上傳至值區的說明,請參閱上傳物件。 
- 說明您要匯入的目標執行個體:
gcloud sql instances describe INSTANCE_NAME 
- 複製 serviceAccountEmailAddress欄位。
- 使用 gcloud storage buckets add-iam-policy-binding將storage.objectAdminIAM 角色授予 bucket 的服務帳戶。gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE-ACCOUNT \ --role=roles/storage.objectAdmin 
- 匯入資料庫:gcloud sql import sql INSTANCE_NAME gs://BUCKET_NAME/IMPORT_FILE_NAME \ --database=DATABASE_NAME 如要瞭解如何使用 import sql指令,請參閱sql import sql指令參考資料頁面。如果指令傳回類似 ERROR_RDBMS的錯誤,請重新檢視權限,因為這個錯誤通常是因權限問題所致。
- 如果您不需要保留先前設定的 IAM 權限,請使用 gcloud storage buckets remove-iam-policy-binding移除這些權限。
REST v1
- 
建立 SQL 傾印檔案。連結的操作說明會設定特定標記,讓傾印檔案與 Cloud SQL 相容。 - 如要從地端 MySQL 伺服器匯入資料,請按照下列步驟操作:
- 建立 SQL 傾印檔案。
- 在 Cloud Storage 中建立 bucket。
- 將 SQL 傾印檔案上傳至 Cloud Storage bucket。
- 如要從其他 Cloud SQL 執行個體匯入資料,請參閱將資料從 Cloud SQL 匯出至 SQL 傾印檔案的操作說明。
 
- 建立 Cloud Storage bucket。
- 上傳檔案至值區。 - 如需將檔案上傳至值區的說明,請參閱上傳物件。 
-  為執行個體提供值區的 legacyBucketWriter和objectViewerIAM 角色。如需設定 IAM 權限的說明,請參閱使用 IAM 權限一文。
- 匯入傾印檔案:
    
    
  
<x0A>
  
  
    
    
  
  
  
    
  
<使用任何要求資料之前,請先替換以下項目: - project-id:專案 ID
- instance-id:執行個體 ID
- bucket_name:Cloud Storage bucket 名稱
- path_to_sql_file:SQL 檔案的路徑
- database_name:Cloud SQL 執行個體內的資料庫名稱
 HTTP 方法和網址: POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import JSON 要求主體: { "importContext": { "fileType": "SQL", "uri": "gs://bucket_name/path_to_sql_file", "database": "database_name" } }如要傳送要求,請展開以下其中一個選項: 您應該會收到如下的 JSON 回應: 如需此要求的完整參數清單,請參閱 instances:import 頁面。
- 如果您不需要保留先前設定的 IAM 權限,請立即予以移除。
REST v1beta4
- 
建立 SQL 傾印檔案。連結的操作說明會設定特定標記,讓傾印檔案與 Cloud SQL 相容。 - 如要從地端 MySQL 伺服器匯入資料,請按照下列步驟操作:
- 建立 SQL 傾印檔案。
- 在 Cloud Storage 中建立 bucket。
- 將 SQL 傾印檔案上傳至 Cloud Storage bucket。
- 如要從其他 Cloud SQL 執行個體匯入資料,請參閱將資料從 Cloud SQL 匯出至 SQL 傾印檔案的操作說明。
 
- 建立 Cloud Storage bucket。
- 上傳檔案至值區。 - 如需將檔案上傳至值區的說明,請參閱上傳物件。 
-  為執行個體提供值區的 storage.objectAdminIAM 角色。如需設定 IAM 權限的說明,請參閱使用 IAM 權限一文。
- 匯入傾印檔案:
    
    
  
<x0A>
  
  
    
    
  
  
  
    
  
<使用任何要求資料之前,請先替換以下項目: - project-id:專案 ID
- instance-id:執行個體 ID
- bucket_name:Cloud Storage bucket 名稱
- path_to_sql_file:SQL 檔案的路徑
- database_name:Cloud SQL 執行個體內的資料庫名稱
 HTTP 方法和網址: POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import JSON 要求主體: { "importContext": { "fileType": "SQL", "uri": "gs://bucket_name/path_to_sql_file", "database": "database_name" } }如要傳送要求,請展開以下其中一個選項: 您應該會收到如下的 JSON 回應: 如需此要求的完整參數清單,請參閱 instances:import 頁面。
- 如果您不需要保留先前設定的 IAM 權限,請立即予以移除。
後續步驟
- 瞭解如何檢查匯入與匯出作業的狀態。
- 進一步瞭解匯入及匯出資料的最佳做法。
- 進一步瞭解 Cloud Storage。
- 匯入及匯出作業的已知問題。