将与 MySQL 兼容的数据库作为 Amazon Database Migration Service 的目标 - Amazon Database Migration Service
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托管服务上,例如亚马逊 RDS、亚马逊 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 处理 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.
  • Aurora Serverless 版本包括直至 Amazon Aurora MySQL 版本 1 的目标,具备 MySQL 5.6 兼容性。Aurora Serverless 版本包括直至 Amazon Aurora MySQL 版本 2 的目标,具备 MySQL 5.7 兼容性。(选择 MAurora SQL 版本 2.07.1,即可使用具Aurora MySQL 5.7 兼容性。) 有关 Aurora Serverless 的更多信息,请参阅 A mazon Aurora Amazon Aurora a Serverless

  • Amazon DMS不支持对 Aurora 或 Amazon RDS 使用读取器终端节点,除非实例处于可写模式,即read_onlyinnodb_read_only参数设置为0OFF。有关 Amazon RDS 和 Aurora RDS 和 Aurora RDS 和 Aurora Rds

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

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

下表显示了可以将 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—104.84.84.84.84.84.84.8

--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 数据类型的其他信息,请参阅Database MigratiAmazon on 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 支持)。