使用 CSV 檔案匯出及匯入

本頁面說明如何使用 CSV 檔案,將資料匯出及匯入 Cloud SQL 執行個體。

事前準備

開始匯出或匯入作業前:

  • 確認資料庫有足夠的可用空間。
  • 匯出和匯入作業會使用資料庫資源,但除非執行個體佈建不足,否則不會干擾正常的資料庫作業。

  • 確認 CSV 檔案包含預期資料,且格式正確。CSV 檔案的每一行都必須是資料欄位。
  • 請遵循匯出及匯入資料的最佳做法。

從 MySQL 適用的 Cloud SQL 匯出資料

從 MySQL 適用的 Cloud SQL 匯出資料時,所需的角色和權限

如要將 Cloud SQL 資料匯出至 Cloud Storage,發起匯出作業的使用者必須具備下列其中一個角色:

此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:

  • storage.objectAdmin Identity and Access Management (IAM) 角色
  • 自訂角色,包含下列權限:
    • storage.objects.create
    • storage.objects.list (僅適用於平行匯出檔案)
    • storage.objects.delete (僅適用於平行匯出檔案)

如需 IAM 角色方面的協助,請參閱「身分與存取權管理」。

從 MySQL 適用的 Cloud SQL 將資料匯出至 CSV 檔案

您可以匯出 CSV 格式的資料,供其他工具和環境使用。匯出作業會在資料庫層級進行。匯出 CSV 時,您可以指定要匯出的結構定義。資料庫層級的所有結構定義都可匯出。

如要將 Cloud SQL 執行個體資料庫中的資料匯出至 Cloud Storage bucket 中的 CSV 檔案,請按照下列步驟操作:

控制台

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

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

  2. 點選執行個體名稱,開啟執行個體的「總覽」頁面。
  3. 按一下 [匯出]。
  4. 在「檔案格式」部分,按一下「CSV」。
  5. 如果是SQL 查詢,請輸入 SQL 查詢,指定要匯出資料的資料表。

    舉例來說,如要匯出 guestbook 資料庫中 entries 資料表的完整內容,請輸入

    SELECT * FROM guestbook.entries;
    查詢必須指定所選資料庫中的資料表。您無法以 CSV 格式匯出整個資料庫。

  6. 選用:選取「Offload export to a temporary instance」(將匯出的資料卸載至臨時執行個體),允許在匯出期間執行其他作業。
  7. 選用:按一下「顯示資料庫選項」,然後從「資料庫」下拉式選單中選取資料庫名稱。
  8. 在「Destination」(目的地) 區段中,新增要匯出至的值區、資料夾和檔案名稱,或按一下「Browse」(瀏覽) 尋找或建立值區、資料夾或檔案。

    如果點選「瀏覽」:

    1. 在「Location」(位置) 區段中,選取匯出作業的 Cloud Storage bucket 或資料夾。
    2. 在「名稱」方塊中,為 CSV 檔案新增名稱,或在「位置」專區中,從清單選取現有檔案。

      您可以使用 .gz 副檔名 (完整副檔名為 .csv.gz) 壓縮匯出檔案。

    3. 按一下「選取」。
  9. 按一下 [匯出] 即可開始匯出。

gcloud

  1. 建立 Cloud Storage bucket。
  2. 將檔案上傳至 bucket。

    如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。

  3. 找出要匯出資料的 Cloud SQL 執行個體服務帳戶。執行 gcloud sql instances describe 指令即可完成這項操作。在輸出內容中尋找 serviceAccountEmailAddress 欄位。
    gcloud sql instances describe INSTANCE_NAME
  4. 使用 gcloud storage buckets add-iam-policy-binding 將 storage.objectAdmin IAM 角色授予 Cloud SQL 執行個體服務帳戶。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。
  5. 匯出資料庫:
    gcloud sql export csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --offload \
    --query=SELECT_QUERY
    

    如要瞭解如何使用 export csv 指令,請參閱 sql export csv 指令參考頁面。

  6. 如果不需要保留先前設定的 IAM 角色,請立即撤銷。

REST v1

  1. 建立匯出的值區:
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
    

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 為執行個體提供 bucket 的 storage.objectAdmin IAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。
  3. 匯出您的資料庫:

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • path_to_csv_file:CSV 檔案的路徑
    • database_name:Cloud SQL 執行個體中的資料庫名稱
    • offload:啟用無伺服器匯出功能。設為 true 即可使用無伺服器匯出功能。
    • select_query:用於匯出的 SQL 查詢 (選用)
    • escape_character:應顯示在需要逸出的資料字元之前的字元。這個引數的值必須是十六進位 ASCII 碼中的字元。例如,「22」代表雙引號。(選填)
    • quote_character:用於括住字串資料類型資料欄值的字元。這個引數的值必須是十六進位 ASCII 代碼中的字元。例如,「22」代表雙引號。(選填)
    • fields_terminated_by:用來分割資料欄值的字元。這個引數的值必須是十六進位 ASCII 碼中的字元。例如,「2C」代表半形逗號。(選填)
    • lines_terminated_by:用於分割行記錄的字元。這個引數的值必須是十六進位 ASCII 碼中的字元。例如,「0A」代表新的一行。(選填)

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/export

    JSON 要求主體:

    {
     "exportContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "databases": "database_name",
          "offload": true | false
          "csvExportOptions":
           {
               "selectQuery":"select_query",
               "escapeCharacter":"escape_character",
               "quoteCharacter":"quote_character",
               "fieldsTerminatedBy":"fields_terminated_by",
               "linesTerminatedBy":"lines_terminated_by"
           }
       }
    }
    

    請展開以下其中一個選項,以傳送要求:

    您應該會收到如下的 JSON 回覆:

    如果選取查詢指定資料庫,就會覆寫 databases 屬性。

  4. 如果不需要保留先前設定的 IAM 權限,請立即移除。
如需要求的完整參數清單,請參閱 instances:export 頁面。

REST v1beta4

  1. 建立匯出的值區:
    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME

    這並不是必要的步驟,但我們強烈建議您這麼做,以避免開放其他資料的存取權限。

  2. 為執行個體提供 bucket 的 storage.objectAdmin IAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。
  3. 匯出您的資料庫:

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • path_to_csv_file:CSV 檔案的路徑
    • database_name:Cloud SQL 執行個體中的資料庫名稱
    • offload:啟用無伺服器匯出功能。設為 true 即可使用無伺服器匯出功能。
    • select_query:用於匯出的 SQL 查詢 (選用)
    • escape_character:應顯示在需要逸出的資料字元之前的字元。這個引數的值必須採用 ASCII 十六進位格式。例如,「22」代表雙引號。(選填)
    • quote_character:用來括住字串資料類型資料欄值的字元。這個引數的值必須採用 ASCII 十六進位格式。例如,「22」代表雙引號。(選填)
    • fields_terminated_by:用於分割資料欄值的字元。這個引數的值必須採用 ASCII 十六進位格式。例如,「2C」代表半形逗號。(選填)
    • lines_terminated_by:用於分割行記錄的字元。這個引數的值必須採用 ASCII 十六進位格式。例如,「0A」代表新的一行。(選填)

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/export

    JSON 要求主體:

    {
     "exportContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "databases": "database_name",
          "offload": true | false
          "csvExportOptions":
           {
               "selectQuery": "select_query",
               "escapeCharacter":  "escape_character",
               "quoteCharacter": "quote_character",
               "fieldsTerminatedBy": "fields_terminated_by",
               "linesTerminatedBy": "lines_terminated_by"
           }
       }
    }
    

    請展開以下其中一個選項,以傳送要求:

    您應該會收到如下的 JSON 回覆:

    如果選取查詢指定資料庫,就會覆寫 databases 屬性。

  4. 如果不需要保留先前設定的 IAM 角色,請立即撤銷該角色。
如需要求的完整參數清單,請參閱 instances:export 頁面。

自訂 CSV 匯出檔案的格式

您可以使用 gcloud 或 REST API 自訂 CSV 檔案格式。執行匯出作業時,您可以指定下列格式選項:

CSV 選項 預設值 gcloud 旗標 REST API 屬性 說明
Esc 鍵

"5C"

檔案分隔符的 ASCII 十六進位碼。

--escape escapeCharacter

出現在需要逸出的資料字元之前的字元。

僅適用於 MySQL 和 PostgreSQL。

引述

"22"

雙引號的 ASCII 十六進位碼。

--quote quoteCharacter

用於括住字串資料類型資料欄值的字元。

僅適用於 MySQL 和 PostgreSQL。

欄位分隔符號

"2C"

逗號的 ASCII 十六進位碼。

--fields-terminated-by fieldsTerminatedBy

用於分隔資料欄值的字元。

僅適用於 MySQL 和 PostgreSQL。

換行字元

"0A"

換行符號的 ASCII 十六進位碼。

--lines-terminated-by linesTerminatedBy

用於分割行記錄的字元。

僅適用於 MySQL。

舉例來說,使用所有這些引數的 gcloud 指令可能如下所示:

gcloud sql export csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
--database=DATABASE_NAME \
--offload \
--query=SELECT_QUERY \
--quote="22" \
--escape="5C" \
--fields-terminated-by="2C" \
--lines-terminated-by="0A"

對等的 REST API 請求主體如下所示:

{
 "exportContext":
   {
      "fileType": "CSV",
      "uri": "gs://bucket_name/path_to_csv_file",
      "databases": ["DATABASE_NAME"],
      "offload": true,
      "csvExportOptions":
       {
           "selectQuery": "SELECT_QUERY",
           "escapeCharacter":  "5C",
           "quoteCharacter": "22",
           "fieldsTerminatedBy": "2C",
           "linesTerminatedBy": "0A"
       }
   }
}

上述 gcloud 和 API 範例等同於執行下列 SQL 陳述式:

SELECT [QUERY] INTO OUTFILE ... CHARACTER SET 'utf8mb4'
            FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
            ESCAPED BY '\\' LINES TERMINATED BY '\n'

將資料匯入 MySQL 適用的 Cloud SQL

匯入 MySQL 適用的 Cloud SQL 所需的角色和權限

如要將資料從 Cloud Storage 匯入 Cloud SQL,發起匯入作業的使用者必須具備下列其中一個角色:

此外,Cloud SQL 執行個體的服務帳戶必須具備下列其中一個角色:

  • storage.objectAdmin IAM 角色
  • 自訂角色,包含下列權限:
    • storage.objects.get
    • storage.objects.list (僅適用於平行匯入檔案)

如需 IAM 角色相關協助,請參閱「Identity and Access Management」。

將本機 MySQL 伺服器的資料匯出為 CSV 檔案

如要匯出 MySQL 資料表,以便匯入 Cloud SQL,建議您使用下列指令設定檔案格式:

mysql --host=INSTANCE_IP --user=USER_NAME --password DATABASE \
-e " SELECT * FROM TABLE INTO OUTFILE 'FILE_NAME' CHARACTER SET 'utf8mb4'
     FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"' "

您可以自訂 CSV 匯出檔案的格式。

將 CSV 檔案中的資料匯入 MySQL 適用的 Cloud SQL

CSV 檔案格式規定

CSV 檔案的每列資料都必須為獨立的一行,並以半形逗號分隔不同欄位。

使用 CSV 檔案將資料匯入 Cloud SQL 執行個體:

控制台

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

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

  2. 點選執行個體名稱,開啟執行個體的「總覽」頁面。
  3. 按一下「匯入」。
  4. 在「檔案格式」部分,選取「CSV」。
  5. 在「選取來源檔案」部分,輸入 bucket 和 CSV 檔案的路徑,或上傳要用於匯入作業的本機 CSV 檔案。如要瀏覽檔案:
    1. 按一下「瀏覽」。
    2. 在「Location」(位置) 部分,按兩下清單中的 bucket 名稱。
    3. 在清單中選取檔案。
    4. 按一下「選取」。

    你可以匯入壓縮 (.gz) 或未壓縮 (.csv) 的檔案。

  6. 在「Destination」(目的地) 區段中,指定要匯入 CSV 檔案的 Cloud SQL 執行個體資料庫和資料表。
  7. 按一下 [Import] (匯入) 即可開始匯入。

gcloud

  1. 建立 Cloud Storage bucket。
  2. 將檔案上傳至 bucket。

    如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。

  3. 將 CSV 檔案中的資料上傳至 bucket。
  4. 找出要匯出資料的 Cloud SQL 執行個體服務帳戶。如要執行這項操作,請執行 gcloud sql instances describe 指令並提供執行個體名稱。在輸出內容中尋找 serviceAccountEmailAddress 欄位。
    gcloud sql instances describe INSTANCE_NAME
  5. 複製 serviceAccountEmailAddress 欄位。
  6. 使用 gcloud storage buckets add-iam-policy-binding,將 storage.objectAdmin IAM 角色授予 bucket 的 Cloud SQL 執行個體服務帳戶。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。
  7. 匯入檔案:
    gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
    --database=DATABASE_NAME \
    --table=TABLE_NAME

    如要瞭解如何使用 import csv 指令,請參閱 sql import csv 指令參考頁面。

  8. 如果不需要保留先前設定的 IAM 權限,請使用 gcloud storage buckets remove-iam-policy-binding 移除這些權限。

REST v1

  1. 建立 Cloud Storage bucket。
  2. 將檔案上傳至 bucket。

    如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。

  3. 為執行個體提供 bucket 的 storage.objectAdmin 和 objectViewer IAM 角色。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。
  4. 匯入檔案:

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • path_to_csv_file:CSV 檔案的路徑
    • database_name:Cloud SQL 執行個體中的資料庫名稱
    • table_name:資料庫資料表的名稱
    • escape_character:應顯示在需要逸出的資料字元之前的字元。這個引數的值必須是十六進位 ASCII 代碼中的字元。例如,「22」代表雙引號。(選填)
    • quote_character:用來括住字串資料類型資料欄值的字元。這個引數的值必須是十六進位 ASCII 代碼中的字元。例如,「22」代表雙引號。(選填)
    • fields_terminated_by:用來分割資料欄值的字元。這個引數的值必須是十六進位 ASCII 代碼中的字元。例如,「2C」代表半形逗號。(選填)
    • lines_terminated_by:用於分割行記錄的字元。這個引數的值必須是十六進位 ASCII 代碼中的字元。例如,「0A」代表新的一行。(選填)

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/import

    JSON 要求主體:

    {
     "importContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "database": "database_name",
          "csvImportOptions":
           {
             "table": "table_name",
             "escapeCharacter": "escape_character",
             "quoteCharacter": "quote_character",
             "fieldsTerminatedBy": "fields_terminated_by",
             "linesTerminatedBy": "lines_terminated_by"
           }
       }
    }
    
    

    請展開以下其中一個選項,以傳送要求:

    您應該會收到如下的 JSON 回覆:

    如需完整的請求參數清單,請參閱 instances:import 頁面。
  5. 如果不需要保留先前設定的 IAM 權限,請移除這些權限。

REST v1beta4

  1. 建立 Cloud Storage bucket。
  2. 將檔案上傳至 bucket。

    如需將檔案上傳至 bucket 的相關說明,請參閱「上傳物件」。

  3. 為 bucket 提供執行個體 storage.objectAdmin IAM 角色 。如需設定 IAM 權限的相關說明,請參閱「使用 IAM 權限」。
  4. 匯入檔案:

    使用任何要求資料之前,請先修改下列項目的值:

    • project-id:專案 ID
    • instance-id:執行個體 ID
    • bucket_name:Cloud Storage bucket 名稱
    • path_to_csv_file:CSV 檔案的路徑
    • database_name:Cloud SQL 執行個體中的資料庫名稱
    • table_name:資料庫資料表的名稱
    • escape_character:應顯示在需要逸出的資料字元之前的字元。這個引數的值必須採用 ASCII 十六進位格式。例如,「22」代表雙引號。(選填)
    • quote_character:用於括住字串資料類型資料欄值的字元。這個引數的值必須採用 ASCII 十六進位格式。例如,「22」代表雙引號。(選填)
    • fields_terminated_by:用於分隔資料欄值的字元。這個引數的值必須採用 ASCII 十六進位格式。例如,「2C」代表半形逗號。(選填)
    • lines_terminated_by:用於分割行記錄的字元。這個引數的值必須採用 ASCII 十六進位格式。例如,「0A」代表新的一行。(選填)

    HTTP 方法和網址:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import

    JSON 要求主體:

    {
     "importContext":
       {
          "fileType": "CSV",
          "uri": "gs://bucket_name/path_to_csv_file",
          "database": "database_name",
          "csvImportOptions":
           {
             "table": "table_name",
             "escapeCharacter": "escape_character",
             "quoteCharacter": "quote_character",
             "fieldsTerminatedBy": "fields_terminated_by",
             "linesTerminatedBy": "lines_terminated_by"
           }
       }
    }
    
    

    請展開以下其中一個選項,以傳送要求:

    您應該會收到如下的 JSON 回覆:

    如需完整的請求參數清單,請參閱 instances:import 頁面。
  5. 如果不需要保留先前設定的 IAM 權限,請移除這些權限。

自訂 MySQL 適用的 Cloud SQL CSV 檔案格式

您可以使用 gcloud 或 REST API 自訂 CSV 檔案格式。

gcloud 指令範例如下:

gcloud sql import csv INSTANCE_NAME gs://BUCKET_NAME/FILE_NAME \
--database=DATABASE_NAME \
--table=TABLE_NAME \
--quote="22" \
--escape="5C" \
--fields-terminated-by="2C" \
--lines-terminated-by="0A"

對等的 REST API 要求主體如下所示:

{
 "importContext":
   {
      "fileType": "CSV",
      "uri": "gs://bucket_name/path_to_csv_file",
      "database": ["DATABASE_NAME"],
      "csvImportOptions":
       {
           "table": "TABLE_NAME",
           "escapeCharacter":  "5C",
           "quoteCharacter": "22",
           "fieldsTerminatedBy": "2C",
           "linesTerminatedBy": "0A"
       }
   }
}

上述 gcloud 和 API 範例等同於執行下列 SQL 陳述式:

LOAD DATA LOCAL INFILE ... CHARACTER SET 'utf8mb4'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\'.

如果收到 ERROR_RDBMS 等錯誤訊息,請確認資料表是否存在。如果資料表存在,請確認您對該 bucket 具備適當權限。如需在 Cloud Storage 中設定存取控管的說明,請參閱「 建立及管理存取控管清單」。

如要瞭解如何為這項工作建構基礎 REST API 要求,請參閱執行個體匯入頁面的 APIs Explorer。

後續步驟