使用 mysqldump 导出 MySQL 数据库

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

  • --databases 明确指定要导出的数据库列表。此列表不得包含系统数据库 (sysmysqlperformance_schemainformation_schema)。
  • --hex-blob 如果您的数据库包含任何二进制字段,则必须使用此标志来确保二进制字段正确导入。
  • --single-transaction 在运行前启动事务。这样,mysqldump 就可以读取当前状态的数据库,进而实现一致的数据转储,而不是锁定整个数据库。
  • --routines 如需添加存储过程和函数,
  • 使用 mysqldump 8 或更高版本导出低于 8 的 MySQL 数据库版本时
    --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

如果迁移来源是适用于 MySQL 的关系型数据库服务 (RDS),请执行以下操作:

  • 不支持 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)结尾。