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

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

将与 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 支持作为目标的 MySQL 版本的信息,请参阅的目标 Amazon DMS

您可以使用以下与 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 兼容的数据库上禁用外键检查,您可以将以下命令添加到目标端点的 Amazon DMS 控制台的额外连接属性部分:

    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 语句将列添加到表的开头或中间。

  • 在完全加载任务中将数据加载到兼容 MySQL 的目标时,Amazon DMS 不会在任务日志中报告因限制导致的错误,这可能会导致重复的键错误或与记录数量不匹配。这是由 MySQL 使用 LOAD DATA 命令处理本地数据的方式造成的。务必在完全加载阶段执行以下操作:

    • 禁用限制

    • 使用 Amazon DMS 验证来确保数据一致。

  • 当您将列值更新为其现有值时,与 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.
  • Aurora Serverless 可用作 Amazon Aurora 版本 1 的目标,且与 MySQL 版本 5.6 兼容。Aurora Serverless 可用作 Amazon Aurora 版本 2 的目标,且与 MySQL 版本 5.7 兼容。(选择 Aurora MySQL 版本 2.07.1 以便能够使用 Aurora Serverless,且与 MySQL 5.7 兼容。) 有关 Aurora Serverless 的更多信息,请参阅《Amazon Aurora 用户指南》中的使用 Amazon Aurora Serverless

  • Amazon DMS 不支持使用适用于 Aurora 或 Amazon RDS 的读取器端点,除非实例处于可写模式,即 read_onlyinnodb_read_only 参数设置为 0OFF。有关使用 Amazon RDS 和 Aurora 作为目标的更多信息,请参见以下内容:

将与 MySQL 兼容的数据库作为 Amazon DMS 的目标时的端点设置

您可以使用端点设置来配置与 MySQL 兼容的目标数据库,这与使用额外连接属性类似。您可以在使用 Amazon DMS 控制台创建目标端点时指定设置,或者在 Amazon CLI 中使用符合 --my-sql-settings '{"EndpointSetting": "value", ...}' JSON 语法的 create-endpoint 命令。

下表显示了您可以配合使用 MySQL 作为目标的端点设置。

名称 描述

TargetDbType

指定将目标上的源表迁移到的位置 (单个数据库或多个数据库)。如果指定 SPECIFIC_DATABASE,则需要在使用 Amazon CLI 或 Amazon Web Services Management Console 时指定数据库名称。

默认值:MULTIPLE_DATABASES

有效值:{SPECIFIC_DATABASEMULTIPLE_DATABASES}

示例:--my-sql-settings '{"TargetDbType": "MULTIPLE_DATABASES"}'

ParallelLoadThreads

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

默认值:1

有效值:1-5

示例:--my-sql-settings '{"ParallelLoadThreads": 1}'

AfterConnectScript

指定脚本在 Amazon DMS 连接到终端节点后立即运行。

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

示例:--my-sql-settings '{"AfterConnectScript": "SET character_set_connection='latin1'"}'

MaxFileSize

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

默认值:32768 KB (32 MB)

有效值:1–1048576

--my-sql-settings '{"MaxFileSize": 512}'

CleanSrcMetadataOnMismatch

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

默认值:false

示例:--my-sql-settings '{"CleanSrcMetadataOnMismatch": false}'

您也可以使用额外的连接属性配置与 MySQL 兼容的目标数据库。

下表显示了将 MySQL 作为目标时可以使用的额外连接属性。

名称 描述

Initstmt=SET FOREIGN_KEY_CHECKS=0;

禁用外键检查。

示例:--extra-connection-attributes "Initstmt=SET FOREIGN_KEY_CHECKS=0;"

Initstmt=SET time_zone

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

默认值:UTC

有效值:目标 MySQL 数据库中可用的时区名称。

示例:--extra-connection-attributes "Initstmt=SET time_zone=US/Pacific;"

或者,您可以使用 --my-sql-settings 命令的 AfterConnectScript 参数来禁用外键检查并为数据库指定时区。

MySQL 的目标数据类型

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

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

Amazon 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 支持)。