AWS Database Migration Service
用户指南 (版本 API Version 2016-01-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用兼容 MySQL 的数据库作为 AWS Database Migration Service 目标

您可以使用 AWS DMS,将数据从 AWS DMS 支持的任一源数据引擎迁移到与 MySQL 兼容的任何数据库。如果要迁移到与 MySQL 兼容的本地数据库,则 AWS DMS 要求源引擎位于 AWS 生态系统中。该引擎可以位于 Amazon 托管服务(如 Amazon RDS、Amazon Aurora 或 Amazon S3)上。或者,该引擎也可以位于 Amazon EC2 上的自管理数据库中。

您可以使用 SSL 来加密 MySQL 兼容终端节点与复制实例之间的连接。有关将 SSL 用于 MySQL 兼容终端节点的更多信息,请参阅将 SSL 与 AWS Database Migration Service 配合使用

支持 MySQL 版本 5.5、5.6 和 5.7 以及 MariaDB 和 Aurora MySQL。

您可以使用以下与 MySQL 兼容的数据库作为 AWS DMS 的目标:

  • MySQL Community Edition

  • MySQL Standard Edition

  • MySQL Enterprise Edition

  • MySQL Cluster Carrier Grade Edition

  • MariaDB Community Edition

  • MariaDB Enterprise Edition

  • MariaDB Column Store

  • Amazon Aurora MySQL

注意

无论使用什么源存储引擎(MyISAM、MEMORY 等),默认情况下,AWS DMS 都会创建与 MySQL 兼容的目标表作为 InnoDB 表。如果您需要的表使用 InnoDB 之外的存储引擎,则可以在与 MySQL 兼容的目标上手动创建表,然后使用“不执行任何操作”模式来迁移表。有关“不执行任何操作”模式的更多信息,请参阅完全加载任务设置

有关将与 MySQL 兼容的数据库用作 AWS DMS 的目标的更多详细信息,请参阅以下章节。

使用任何兼容 MySQL 的数据库作为 AWS Database Migration Service 目标

在使用兼容 MySQL 的数据库作为 AWS DMS 目标之前,请确保满足以下先决条件:

  • 为 AWS DMS 提供一个用户账户,该账户具有对与 MySQL 兼容的数据库的读取/写入权限。要创建所需的权限,请运行以下命令。

    CREATE USER '<user acct>'@'%' IDENTIFIED BY '<user password>'; GRANT ALTER, CREATE, DROP, INDEX, INSERT, UPDATE, DELETE, SELECT ON <schema>.* TO '<user acct>'@'%'; GRANT ALL PRIVILEGES ON awsdms_control.* TO '<user acct>'@'%';
  • 在完全加载迁移阶段,您必须禁用目标表上的外键。要在完全加载期间在与 MySQL 兼容的数据库上禁用外键检查,您可以将以下命令添加到目标终端节点的高级部分的额外的连接属性

    initstmt=SET FOREIGN_KEY_CHECKS=0

将与 MySQL 兼容的数据库用作 AWS Database Migration Service 的目标时的限制

使用 MySQL 数据库作为目标时,AWS DMS 不支持以下内容:

  • 数据定义语言 (DDL) 语句 TRUNCATE PARTITION、DROP TABLE 和 RENAME TABLE。

  • 使用 ALTER TABLE <table_name> ADD COLUMN <column_name> 语句将列添加到表的开头或中间。

  • 当仅更新源表中的 LOB 列时,AWS DMS 不会更新对应的目标列。仅当在同一事物中至少更新了一个其他列时,目标 LOB 才会更新。

  • 当在完全加载任务中将数据加载到与 MySQL 兼容的目标时,AWS DMS 不会报告任务日志中的重复键错误。

  • 当您将列值更新为其现有值时,与 MySQL 兼容的数据库会返回 0 rows affected 警告。尽管此行为在技术上没有错误,但它与其他数据库引擎应对这种情况的方式不同。例如,Oracle 执行一个行的更新。对于与 MySQL 兼容的数据库,AWS DMS 在 awsdms_apply_exceptions 控制表中生成一个条目,并记录以下警告。

    Some changes from the source database had no impact when applied to the target database. See awsdms_apply_exceptions table for details.

将与 MySQL 兼容的数据库用作 AWS DMS 的目标时的额外连接属性

您可以使用额外的连接属性配置与 MySQL 兼容的目标。在创建目标终端节点时,您可以指定这些设置。如果您具有多个连接属性设置,请用分号将它们彼此分开,并且不需要额外的空格。

下表列出了在为 AWS DMS 创建与 MySQL 兼容的目标时可以使用的额外配置设置。

名称 描述

targetDbType

指定将目标上的源表迁移到的位置 (单个数据库或多个数据库)。

默认值:MULTIPLE_DATABASES

有效值:{SPECIFIC_DATABASEMULTIPLE_DATABASES}

示例:targetDbType=MULTIPLE_DATABASES

parallelLoadThreads

改进了将数据加载到与 MySQL 兼容的目标数据库时的性能。指定用于将数据加载到与 MySQL 兼容的目标数据库中的线程的数目。设置大量线程可能会对数据库性能产生不利影响,因为每个线程均需要一个单独的连接。

默认值:1

有效值:1–5

示例:parallelLoadThreads=1

initstmt=SET FOREIGN_KEY_CHECKS=0

禁用外键检查。

initstmt=SET time-zone

指定与 MySQL 兼容的目标数据库的时区。

默认值:UTC

有效值:要使用的时区的三个或四个字符的缩写形式。有效值是承载与 MySQL 兼容的目标数据库的操作系统的标准时区缩写形式。

示例:initstmt=SET time_zone=UTC

afterConnectScript=SET character_set_connection='latin1'

指定与 MySQL 兼容的目标应将收到的语句转换为 latin1 字符集,该字符集是数据库的默认编入字符集。此参数通常可在从 UTF8 客户端转换时提高性能。

maxFileSize

指定用于将数据传输到与 MySQL 兼容的数据库的任何 .csv 文件的最大大小(以 KB 为单位)。

默认值:32768 KB (32 MB)

有效值:1 - 1048576

示例:maxFileSize=512

CleanSrcMetadataOnMismatch

出现不匹配情况时在复制实例上清除并重新创建表元数据信息。例如,对表运行更改 DDL 可能会产生有关在复制实例中缓存的表的不同信息。布尔值。

默认值:false

示例:CleanSrcMetadataOnMismatch=false

MySQL 的目标数据类型

下表列出了使用 AWS DMS 时支持的 MySQL 数据库目标数据类型以及来自 AWS DMS 数据类型的默认映射。

有关 AWS DMS 数据类型的其他信息,请参阅AWS Database Migration Service 的数据类型

AWS DMS 数据类型

MySQL 数据类型

BOOLEAN

BOOLEAN

BYTES

如果长度介于 1 和 65535 之间,请使用 VARBINARY (length)。

如果长度介于 65536 和 2147483647 之间,请使用 LONGLOB。

DATE

DATE

TIME

TIME

TIMESTAMP

“如果小数位数 => 0 且 <= 6,请使用 DATETIME (Scale)

如果小数位数 => 7 且 <= 9,请使用 VARCHAR (37)”

INT1

TINYINT

INT2

SMALLINT

INT4

INTEGER

INT8

BIGINT

NUMERIC

DECIMAL (p,s)

REAL4

FLOAT

REAL8

DOUBLE PRECISION

STRING

如果长度介于 1 和 21845 之间,请使用 VARCHAR (length)。

如果长度介于 21846 和 2147483647 之间,请使用 LONGTEXT。

UINT1

UNSIGNED TINYINT

UINT2

UNSIGNED SMALLINT

UINT4

UNSIGNED INTEGER

UINT8

UNSIGNED BIGINT

WSTRING

如果长度介于 1 和 32767 之间,请使用 VARCHAR (length)。

如果长度介于 32768 和 2147483647 之间,请使用 LONGTEXT。

BLOB

如果长度介于 1 和 65535 之间,请使用 BLOB。

如果长度介于 65536 和 2147483647 之间,请使用 LONGBLOB。

如果长度为 0,请使用 LONGBLOB (完全 LOB 支持)。

NCLOB

如果长度介于 1 和 65535 之间,请使用 TEXT。

如果长度介于 65536 和 2147483647 之间,请将 LONGTEXT 与 ucs2 一起用于 CHARACTER SET。

如果长度为 0,请将 LONGTEXT (完全 LOB 支持) 与 ucs2 一起用于 CHARACTER SET。

CLOB

如果长度介于 1 和 65535 之间,请使用 TEXT。

如果长度介于 65,536 和 2147483647 之间,请使用 LONGTEXT。

如果长度为 0,请使用 LONGTEXT (完全 LOB 支持)。