本頁面說明如何使用 SQL dump 檔案,將資料匯出及匯入 Cloud SQL 執行個體。
事前準備
匯出作業會使用資料庫資源,但除非執行個體資源不足,否則不會干擾正常的資料庫作業。
如需最佳做法,請參閱「匯入及匯出資料的最佳做法」。
完成匯入作業後,請驗證結果。
從 MySQL 適用的 Cloud SQL 匯出資料
從 MySQL 適用的 Cloud SQL 匯出資料時,所需的角色和權限
如要將 Cloud SQL 資料匯出至 Cloud Storage,發起匯出作業的使用者必須具備下列其中一個角色:
- Cloud SQL 編輯者角色
- 自訂角色,包含下列權限:
cloudsql.instances.getcloudsql.instances.export
此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:
storage.objectAdminIdentity and Access Management (IAM) 角色- 自訂角色,包括下列權限:
storage.objects.createstorage.objects.list(僅適用於平行匯出檔案)storage.objects.delete(僅適用於平行匯出檔案)
如需 IAM 角色方面的協助,請參閱「身分與存取權管理」。
從 MySQL 適用的 Cloud SQL 匯出至 SQL dump 檔案
如要建立 SQL dump 檔案,請將 Cloud SQL 中的資料匯出至 Cloud Storage。檔案上傳至 Cloud Storage 後,即可匯入其他 Cloud SQL 資料庫。如要存取本機資料,也可以從 Cloud Storage 下載資料至本機環境。從 Cloud SQL 匯出資料時,會使用 mysqldump 公用程式,並搭配 --single-transaction 和 --hex-blob 選項。使用 --single-transaction 選項時,mysqldump 會在執行前啟動交易。這樣一來,mysqldump 就能讀取目前狀態的資料庫,而非鎖定整個資料庫,進而產生一致的資料傾印。
如果 SQL dump 檔案包含 DEFINER 子句 (檢視表、觸發條件、stored_procedures 等),則視這些陳述式的執行順序而定,使用這個檔案匯入可能會失敗。進一步瞭解 Cloud SQL 中的 DEFINER 用途和潛在解決方法。
如要將 Cloud SQL 執行個體資料庫中的資料,匯出至 Cloud Storage bucket 中的 SQL dump 檔案,請按照下列步驟操作:
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 點選執行個體名稱,開啟執行個體的「總覽」頁面。
- 按一下 [匯出]。
- 在「檔案格式」部分,按一下「SQL」即可建立 SQL 傾印檔。
- 在「Data to export」(要匯出的資料) 區段中,按一下「One or more databases in this instance」(這個執行個體內的一或多個資料庫),即可匯出特定資料庫。
- 使用「Databases」(資料庫) 下拉式選單,選取要匯出的資料庫。
- 選用:選取「Offload export to a temporary instance」(將匯出的資料卸載至臨時執行個體),即可在匯出期間執行其他作業。
- 在「目的地」部分,選取「瀏覽」,搜尋要匯出至哪個 Cloud Storage bucket 或資料夾。
- 按一下「匯出」即可開始匯出。
gcloud
- 建立 Cloud Storage bucket。
- 找出要匯出資料的 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
這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。
- 為執行個體提供 bucket 的
storage.objectAdminIAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。 - 匯出資料庫:
使用任何要求資料之前,請先修改下列項目的值:
- PROJECT_ID:專案 ID
- INSTANCE_ID:執行個體 ID
- BUCKET_NAME:Cloud Storage bucket 名稱
- PATH_TO_DUMP_FILE:SQL dump 檔案的路徑
- 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
這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。
- 為執行個體提供 bucket 的
storage.objectAdminIAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。 - 匯出資料庫:
使用任何要求資料之前,請先修改下列項目的值:
- PROJECT_ID:專案 ID
- INSTANCE_ID:執行個體 ID
- BUCKET_NAME:Cloud Storage bucket 名稱
- PATH_TO_DUMP_FILE:SQL dump 檔案的路徑
- 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=OFFSQL dump 檔案不得包含 GTID 資訊,且不得停用二進位記錄。(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
如要建立用於外部伺服器設定的 dump 檔案,請參閱「從外部伺服器複製」。
將資料匯入 MySQL 適用的 Cloud SQL
匯入 MySQL 適用的 Cloud SQL 所需的角色和權限
如要將資料從 Cloud Storage 匯入 Cloud SQL,發起匯入作業的使用者必須具備下列其中一個角色:
- Cloud SQL 管理員角色
- 自訂角色,包括下列權限:
cloudsql.instances.getcloudsql.instances.import
此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:
storage.objectAdminIAM 角色- 自訂角色,包含下列權限:
storage.objects.getstorage.objects.list(僅用於平行匯入檔案)
如需 IAM 角色方面的協助,請參閱「身分與存取權管理」。
將 SQL dump 檔案匯入 MySQL 適用的 Cloud SQL
SQL 檔案是純文字檔案,含有一系列 SQL 指令。
控制台
-
前往 Google Cloud 控制台的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面。
- 點選執行個體名稱,開啟執行個體的「總覽」頁面。
- 按一下「匯入」。
- 在「檔案格式」部分,選取「SQL」。
- 在「Select source file」(選取來源檔案) 區段中,輸入要用於匯入作業的 bucket 和 SQL dump 檔案路徑、瀏覽至現有檔案,或上傳本機檔案。
您可以匯入壓縮 (
.gz) 或未壓縮 (.sql) 的檔案。 在「Destination」(目的地) 區段中,選取要匯入資料的資料庫。
Cloud SQL 會在匯入前執行
USE DATABASE陳述式。如要指定執行匯入作業的使用者,請選取該使用者。
如果匯入檔案包含必須由特定使用者執行的陳述式,請使用這個欄位指定該使用者。
- 按一下 [Import] (匯入) 即可開始匯入。
gcloud
- 建立 Cloud Storage bucket。
將檔案上傳至 bucket。
如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。
- 說明您要匯入的目標執行個體:
gcloud sql instances describe INSTANCE_NAME
- 複製
serviceAccountEmailAddress欄位。 - 使用
gcloud storage buckets add-iam-policy-binding將storage.objectAdminIAM 角色授予 bucket 的服務帳戶。 如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。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等錯誤,請檢查權限,因為這類錯誤通常是權限問題所致。 - 如果不需要保留先前設定的身分與存取權管理權限,請使用
gcloud storage buckets remove-iam-policy-binding移除。
REST v1
-
建立 SQL dump 檔案。連結的說明會設定特定標記,讓傾印檔案與 Cloud SQL 相容。
- 如要從地端部署 MySQL 伺服器匯入資料,請按照下列步驟操作:
- 建立 SQL dump 檔案。
- 在 Cloud Storage 建立 bucket。
- 將 SQL dump 檔案上傳至 Cloud Storage bucket。
- 如要從其他 Cloud SQL 執行個體匯入資料,請參閱「將資料從 Cloud SQL 匯出至 SQL dump 檔案」一文中的操作說明。
- 建立 Cloud Storage bucket。
將檔案上傳至 bucket。
如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。
- 為執行個體提供 bucket 的
storage.objectAdmin和objectViewerIAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。 - 匯入傾印檔案:
<0x0A
使用任何要求資料之前,請先修改下列項目的值:
- 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 dump 檔案。連結的操作說明會設定特定旗標,讓 dump 檔案與 Cloud SQL 相容。
- 如要從地端部署 MySQL 伺服器匯入資料,請按照下列步驟操作:
- 建立 SQL dump 檔案。
- 在 Cloud Storage 建立 bucket。
- 將 SQL dump 檔案上傳至 Cloud Storage bucket。
- 如要從其他 Cloud SQL 執行個體匯入資料,請參閱「將資料從 Cloud SQL 匯出至 SQL dump 檔案」一文的操作說明。
- 建立 Cloud Storage bucket。
將檔案上傳至 bucket。
如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。
- 為執行個體提供 bucket 的
storage.objectAdminIAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。 - 匯入 dump 檔案:
使用任何要求資料之前,請先修改下列項目的值:
- 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。
- 匯入及匯出作業的已知問題。