使用 mysqldump 导出 MySQL 数据库

您可以直接针对 MySQL 数据库运行 mysqldump 实用程序,并使用所需的任何选项。但是,如果您要导出数据以将其导入到 Cloud SQL 数据库,请使用带有以下标志的 mysqldump 实用程序:

  • --databases 指定要导出的数据库的明确列表。此列表不得包含系统数据库(sys、mysql、performance_schema 和 information_schema)。
  • --hex-blob 如果您的数据库包含任何二进制字段,则必须使用此标志来确保二进制字段正确导入。
  • --single-transaction 在运行前启动事务。它不会锁定整个数据库,而是让 mysqldump 读取当前状态的数据库,从而形成一致的数据转储。
  • --routines 用于包含存储过程和函数。
  • 使用 mysqldump 8 或更高版本导出 MySQL 8 之前的数据库时:
    --column-statistics=0

    此标志会从数据库导出中移除 COLUMN_STATISTICS 表,以避免 Unknown table 'COLUMN_STATISTICS' in information_schema (1109) 错误。如需了解详情,请参阅诊断问题。

此外,我们还建议您使用以下标志:

  • --no-autocommit
  • --default-character-set=utf8mb4
  • --master-data

在与 MySQL 服务器建立了网络连接的机器上,运行以下命令:

    mysqldump \
        -h [SOURCE_ADDR] -P [SOURCE_PORT] -u [USERNAME] -p \
        --databases [DBS]  \
        --hex-blob \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --master-data=1  \
        --single-transaction \
        --routines \
        | gzip \
        | gcloud storage cp - gs://[BUCKET_NAME]/[DUMP_FILENAME].gz

如果迁移的来源是 关系型数据库服务 (RDS) for MySQL:

  • 不支持 master-data 属性。
  • 如果源数据库服务器支持 GTID,请使用 --set-gtid-purged=on 属性;否则,请勿使用此属性。
  • 如果您使用手动转储来迁移数据,请在启用 GTID 的情况下执行迁移。

此命令可能如以下示例所示:

    mysqldump \
        -h [SOURCE_ADDR] -P [SOURCE_PORT] -u [USERNAME] -p \
        --databases [DBS]  \
        --hex-blob  \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --set-gtid-purged=on \
        --single-transaction \
        --routines \ 
        | gzip \
        | gcloud storage cp - gs://[BUCKET_NAME]/[DUMP_FILENAME].gz

此外,您还应配置 RDS 实例以将二进制日志保留更长时间。此命令可能如以下示例所示:

    # Sets the retention period to one week.
    call mysql.rds_set_configuration('binlog retention hours', 168);

将 [PROPERTIES_IN_BRACKETS] 替换为以下值:

属性 值
[SOURCE_ADDR] 源数据库服务器的 IPv4 地址或主机名。
[SOURCE_PORT] 源数据库服务器的端口。
[USERNAME] MySQL 用户账号。
[DBS] 源数据库服务器上要包含在转储中的数据库的列表,以英文空格分隔。使用 SHOW DATABASES MySQL 命令可以列出您的数据库。
[BUCKET_NAME] 用户在 Cloud Storage 中创建的用于存储转储文件的存储桶(例如 replica-bucket)。
[DUMP_FILENAME] 转储的文件名,以 .gz 文件扩展名结尾(例如 source-database.sql.gz)。

后续步骤

如需获取完整的迁移分步指南,请参阅 Cloud SQL for MySQL 迁移使用入门。