从 Cloud SQL 导出数据

本页面介绍如何从 Cloud SQL 实例或非 Cloud SQL 管理的数据库服务器导出数据。

您可以将数据从 Cloud SQL 导出到 Cloud Storage。如果要在本地访问 Cloud Storage 中的数据,您还可以将该数据下载到本地环境。

如需将数据导出到 Cloud Storage,您必须在项目级层为实例的服务帐号设置 storage.objectAdmin Cloud IAM 角色。如需了解详情,请参阅适用于 Cloud Storage 的 Cloud Identity and Access Management

您可以导出 CSV 文件。您也可以导出 SQL 转储文件,例如将数据导出到其他 SQL 数据库。

要了解导出数据的最佳做法,请参阅导入和导出数据的最佳做法

使用相同的 SQL 模式来执行导入和导出操作

SQL 模式设置会影响 Cloud SQL 解释 SQL 查询的方式。例如,如果您从没有启用严格 SQL 的数据库中导出数据,然后尝试将数据导入到 Cloud SQL(默认启用严格 SQL),则导入操作可能会失败。最佳做法是在导入时使用导出操作所用的相同 SQL 模式。

请检查源数据库和目标数据库上的 SQL 模式是否兼容。 请特别注意启用严格 SQL 模式的标志。 如果您的数据库未设置严格 SQL,则您可能需要在 Cloud SQL 中移除严格 SQL。如果您移除严格 SQL,则必须设置其他标志。

如需验证您的 Cloud SQL 实例是否设置了所需的模式,请运行 SELECT @@GLOBAL.sql_mode;

使用 Cloud SQL 导出数据

控制台

  1. 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。

    转到“Cloud SQL 实例”页面

  2. 点击要从中导出数据的实例,打开其“实例详情”页面。
  3. 点击按钮栏中的导出
  4. Cloud Storage 导出位置下,选择导出的目标 Cloud Storage 存储分区或文件夹。
  5. 名称字段中,为导出文件提供一个名称,然后点击选择
  6. 对于格式,请选择 SQL
  7. 点击显示高级选项,然后输入您要导出的所有数据库的英文逗号分隔列表。请勿包括系统数据库。
  8. 点击导出以开始导出。

gcloud

要将实例中的转储文件导出到 Cloud Storage 存储分区,请执行以下操作:

  1. 为导出创建一个存储分区:
      gsutil mb -p [PROJECT_NAME] -l [LOCATION_NAME] gs://[BUCKET_NAME]
      

    此步骤并非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 描述要从中进行导出的实例:
      gcloud sql instances describe [INSTANCE_NAME]
      
  3. 复制 serviceAccountEmailAddress 字段。
  4. 使用 gsutil iam 向服务帐号授予该存储分区的 storage.objectAdmin Cloud IAM 角色。如需有关设置 Cloud IAM 权限的帮助,请参阅使用 Cloud IAM 权限
  5. 导出数据库:
      gcloud sql export sql [INSTANCE_NAME] gs://[BUCKET_NAME]/sqldumpfile.gz \
                                  --database=[DATABASE_NAME]
      

    如需了解如何使用 export sql 命令,请参阅 sql export sql 命令参考页面。

  6. 如果您不需要保留之前设置的 Cloud IAM 角色,请立即移除该角色。

REST

  1. 为导出创建一个存储分区:
    gsutil mb -p [PROJECT_NAME] -l [LOCATION_NAME] gs://[BUCKET_NAME]
    

    此步骤非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 为您的实例提供存储分区的 storage.objectAdmin Cloud IAM 角色。如需有关设置 Cloud IAM 权限的帮助,请参阅使用 Cloud IAM 权限
  3. 导出数据库:

    在使用下面的任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID
    • bucket_name:Cloud Storage 存储分区名称
    • path_to_dump_file:SQL 转储文件的路径
    • database_name_1:Cloud SQL 实例中数据库的名称
    • database_name_2:Cloud SQL 实例中数据库的名称

    HTTP 方法和网址:

    POST https://www.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_1", "database_name_2"]
        }
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应该会收到类似以下内容的 JSON 响应:

  4. 如果您不需要保留之前设置的 Cloud IAM 角色,请立即移除该角色。
如需查看此请求的完整参数列表,请参阅 instances:export 页面。

将数据导出到 CSV 文件

您可使用 CSV 格式导出数据,以供其他工具和环境使用。导出操作在数据库级层进行。在 CSV 导出期间,您可以指定要导出的架构。数据库级层下的所有架构都可以导出。

您无法将从 MySQL 实例创建的 CSV 文件导入 PostgreSQL 或 SQL Server 实例,反之亦然。

控制台

  1. 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。

    转到“Cloud SQL 实例”页面

  2. 点击实例,以打开其实例概览页面。
  3. 点击导出
  4. Cloud Storage 导出位置下,选择导出的目标 Cloud Storage 存储分区或文件夹。
  5. 名称字段中,为导出文件提供一个名称,然后点击选择

    您可以使用 .gz 的文件扩展名来压缩导出文件。

  6. 格式设置为 CSV
  7. 输入 SQL 查询以指定要导出的数据。

    例如,如需导出 guestbook 数据库中 entries 表的全部内容,请输入 SELECT * FROM guestbook.entries;。您的查询必须指定一个表;您无法以 CSV 格式导出整个数据库。

  8. 点击导出以开始导出。

gcloud

  1. 为导出创建一个存储分区:
    gsutil mb -p [PROJECT_NAME] -l [LOCATION_NAME] gs://[BUCKET_NAME]
    

    此步骤非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 描述要从中进行导出的实例:
    gcloud sql instances describe [INSTANCE_NAME]
    
  3. 使用 gsutil iam 向服务帐号授予该存储分区的 storage.objectAdmin Cloud IAM 角色。如需有关设置 Cloud IAM 权限的帮助,请参阅使用 Cloud IAM 权限
  4. 导出数据库:
    gcloud sql export csv [INSTANCE_NAME] gs://[BUCKET_NAME]/[FILE_NAME] \
                                --database=[DATABASE_NAME] --query=[SELECT_QUERY]
    

    如需了解如何使用 export csv 命令,请参阅 sql export csv 命令参考页面。

  5. 如果您不需要保留之前设置的 Cloud IAM 权限,请立即移除这些权限。

REST

  1. 为导出创建一个存储分区:
    gsutil mb -p [PROJECT_NAME] -l [LOCATION_NAME] gs://[BUCKET_NAME]
    

    此步骤非必需,但强烈建议执行此步骤,确保您不会访问任何其他数据。

  2. 为您的实例提供存储分区的 storage.objectAdmin Cloud IAM 角色。如需有关设置 Cloud IAM 权限的帮助,请参阅使用 Cloud IAM 权限
  3. 导出数据库:

    在使用下面的任何请求数据之前,请先进行以下替换:

    • project-id:项目 ID
    • instance-id:实例 ID
    • bucket_name:Cloud Storage 存储分区名称
    • path_to_csv_file:CSV 文件的路径
    • database_name:Cloud SQL 实例中数据库的名称
    • select_query:适用于导出的 SQL 查询

    HTTP 方法和网址:

    POST https://www.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"],
          "csvExportOptions":
           {
               "selectQuery":"select_query"
           }
       }
    }
    

    如需发送您的请求,请展开以下选项之一:

    您应该会收到类似以下内容的 JSON 响应:

    如果您的 select 查询指定了数据库,则它将替换 databases 属性。

  4. 如果您不需要保留之前设置的 Cloud IAM 权限,请立即移除这些权限。
如需查看此请求的完整参数列表,请参阅 instances:export 页面。

以 CSV 格式导出等效于运行以下 SQL 语句:

  SELECT <query> INTO OUTFILE ... CHARACTER SET 'utf8mb4'
        FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
        ESCAPED BY '\\' LINES TERMINATED BY '\n'

从本地 MySQL 服务器创建 CSV 文件

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 '\"' "

使用 mysqldump 导出

您可以使用所需的任何选项,直接针对您的 Cloud SQL 数据库运行 mysqldump 实用程序。但是,如果您要从 Cloud SQL 导出数据以便将数据导入其他 Cloud SQL 数据库,则必须将 mysqldump 实用程序与以下标志搭配使用:

  • --databases 必须使用 --databases 选项明确指定要导出的数据库列表,并且此列表不得包含 mysql 系统数据库。
  • --hex-blob 如果您的数据库包含任何二进制字段,则必须使用此标志来确保二进制字段正确导入。
  • --set-gtid-purged=OFF GTID 信息不得包含在 SQL 转储文件中,且 SQL 转储文件不应停用二进制日志记录。(MySQL 5.5 或外部复制无此要求)。
  • --single-transaction从外部服务器复制

标准配置

从命令行运行 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 参考文档

外部复制

如需创建转储文件以在外部主实例配置中使用,请参阅从外部服务器复制

如需了解如何为此任务构建底层 REST API 请求,请参阅 instances:export 页面上的 APIs Explorer

后续步骤