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

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

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

您可以使用任何支持的源数据引擎将数据迁移到任何与 MyS Amazon DMS QL 兼容的数据库。 Amazon DMS 如果您要迁移到与 MySQL 兼容的本地数据库,则 Amazon DMS 需要您的源引擎位于生态系统中。 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的目标之前,请确保完成以下先决条件:

  • 为其提供对兼容 MyS Amazon DMS QL 的数据库具有读/写权限的用户帐户。要创建所需的权限,请运行以下命令。

    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 兼容的数据库,在 awsdms_apply_exceptions 控制表中 Amazon DMS 生成一个条目并记录以下警告。

    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 版本 2 的目标,且与 MySQL 版本 5.7 兼容。(选择 Aurora MySQL 版本 2.07.1 以便能够使用 Aurora Serverless,且与 MySQL 5.7 兼容。) 有关 Aurora Serverless 的更多信息,请参阅亚马逊 Aurora 用户指南中的使用 Aurora Serverless v2

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

使用与 MySQL 兼容的数据库作为目标时的终端节点设置 Amazon DMS

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

下表显示了您可以配合使用 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 的目标数据类型

下表显示了使用时支持的 MySQL 数据库目标数据类型 Amazon DMS 以及 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 支持)。