您可以使用所需的任何选项,直接针对您的 MySQL 数据库运行 mysqldump 实用程序。但是,如果您要导出数据以将其导入 Cloud SQL 数据库,请将 mysqldump 实用程序与以下标志搭配使用:
--databases
明确指定要导出的数据库列表。此列表不得包含系统数据库 (sys
、mysql
、performance_schema
和information_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 )结尾。 |