将与 MySQL 兼容的数据库作为 Amazon Database Migration Service 的目标 - Amazon Database Migration Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将与 MySQL 兼容的数据库作为 Amazon Database Migration Service 的目标

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

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

Amazon DMS支持版本 5.5、5.6、5.7 和 8.0 的 MySQL。此外,Amazon DMS支持 MariaDB 版本 10.0.24 到 10.0.28、10.1、10.2、10.3、10.4 和 10.5。

您可以使用以下与 MySQL 兼容的数据库作为 Amazon 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 等),默认情况下,Amazon DMS 都会创建与 MySQL 兼容的目标表作为 InnoDB 表。

如果您需要 InnoDB 之外的存储引擎中的表,则可以在与 MySQL 兼容的目标上手动创建表,然后使用 Do nothing (不执行任何操作) 选项来迁移表。有关更多信息,请参阅完全加载任务设置

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

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

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

  • 为 Amazon 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
  • 设置数据库参数 local_infile = 1 以启用 Amazon DMS,以便将数据加载到目标数据库。

将与 MySQL 兼容的数据库作为 Amazon Database Migration Service 目标的限制

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

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

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

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

  • 当在完全加载任务中将数据加载到与 MySQL 兼容的目标时,Amazon DMS不会在任务日志中报告重复的键错误。这是因为 MySQL 处理 CSV 加载数据的方式。

  • 当您将列值更新为其现有值时,与 MySQL 兼容的数据库会返回 0 rows affected 警告。尽管此行为在技术上没有错误,但它与其他数据库引擎应对这种情况的方式不同。例如,Oracle 执行一个行的更新。对于与 MySQL 兼容的数据库,Amazon 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.
  • 极光无服务器可作为 Amazon Aurora 版本 1 的目标,与 MySQL 版本 5.6 兼容。极光无服务器可作为 Amazon Aurora 版本 2 的目标,与 MySQL 版本 5.7 兼容。(选择 Aurora MySQL 版本 2.07.1 以便能够将 Aurora 无服务器与 MySQL 版本 5.7 兼容。) 有关 Aurora 无服务器的更多信息,请参阅使用 Amazon Aurora 无服务器中的Amazon Aurora 用户指南.

  • 使用 Aurora 读取器端点。您不能将 Aurora for MySQL 读取器终端节点,因为read_only参数无法更改。您可以使用适用于 MySQL 读取器端点的 Amazon RDS,如果read_only参数设置为 0。

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

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

下表显示了在为 Amazon 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 为单位)。

默认值:32,768 千 B (32 毫巴)

有效值:1—1,048,576

示例:maxFileSize=512

CleanSrcMetadataOnMismatch

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

默认值:false

示例:CleanSrcMetadataOnMismatch=false

MySQL 的目标数据类型

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

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

Amazon DMS 数据类型

MySQL 数据类型

BOOLEAN

BOOLEAN

BYTES

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

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

DATE

DATE

TIME

TIME

TIMESTAMP

“如果小数位数 => 0 且 =6,请使用:DATEME(缩放)

如果小数位数 => 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 支持)。