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

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

将与 MySQL 兼容的数据库作为 Amazon DMS 源

您可以使用 Amazon Database Migration Service 从任何与 MySQL 兼容的数据库(MySQL、MariaDB 或 Amazon Aurora MySQL)中迁移数据。

有关 Amazon DMS 支持作为来源的 MySQL 版本的信息,请参阅的来源 Amazon DMS

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

在以下各节中,术语“自管理”适用于在本地安装或在 Amazon EC2 上安装的任何数据库。术语“Amazon 托管”适用于 Amazon RDS、Amazon Aurora 或 Amazon S3 上的任何数据库。

有关使用与 MySQL 兼容的数据库和 Amazon DMS 的其他详细信息,请参阅以下章节。

使用 Amazon DMS 从 MySQL 迁移到 MySQL。

对于异构迁移,从 MySQL 之外的数据库引擎迁移到 MySQL 数据库时,Amazon DMS 通常是可以利用的最佳迁移工具。但是,对于同构迁移,即从 MySQL 数据库迁移到 MySQL 数据库,我们建议您使用同构数据迁移项目。与 Amazon DMS 相比,同构数据迁移使用原生数据库工具来提供更好的数据迁移性能和准确性。

将与 MySQL 兼容的任何数据库作为 Amazon DMS 的源

在开始将 MySQL 数据库作为 Amazon DMS 源之前,请确保满足以下先决条件。这些先决条件适用于自管理或 Amazon 托管的源。

您必须拥有具有复制管理员角色的 Amazon DMS 的账户。该角色需要以下权限:

  • REPLICATION CLIENT – 仅 CDC 任务需要此权限。换句话说, full-load-only 任务不需要此权限。

  • REPLICATION SLAVE – 仅 CDC 任务需要此权限。换句话说, full-load-only 任务不需要此权限。

  • SUPER - 仅 MySQL 5.6.6 之前的版本需要此权限。

Amazon DMS 用户还必须具有为复制指定的源表的 SELECT 权限。

将与 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

要使用 CDC,请确保启用二进制日志记录。要启用二进制日志记录,则必须在 MySQL 的 my.ini (Windows) 或 my.cnf (UNIX) 文件中配置以下参数。

参数

server_id

将该参数设置为 1 或更大的值。

log-bin

设置二进制日志文件的路径,例如 log-bin=E:\MySql_Logs\BinLog。请勿包含文件扩展名。

binlog_format

将该参数设置为 ROW。我们建议在复制期间使用此设置,因为在某些情况下,如果 binlog_format 设置为 STATEMENT,那么在将数据复制到目标时可能会导致不一致。如果 binlog_format 设置为 MIXED,数据库引擎还会向目标写入类似的不一致数据,因为数据库引擎会自动切换到基于 STATEMENT 的日志记录,这可能导致在目标数据库上写入不一致的数据。

expire_logs_days

将该参数设置为 1 或更大的值。为防止过度使用磁盘空间,我们建议您不要使用默认值 0。

binlog_checksum

NONE对于 DMS 版本 3.4.7 或更早版本,请将此参数设置为。

binlog_row_image

将该参数设置为 FULL

log_slave_updates

如果您使用 MySQL 或 MariaDB 只读副本作为源,请将此参数设置为 TRUE

如果您的源使用了 NDB (集群式) 数据库引擎,则必须配置以下参数以对使用该存储引擎的表启用 CDC。请在 MySQL 的 my.ini (Windows) 或 my.cnf (UNIX) 文件中添加这些更改。

参数

ndb_log_bin

将该参数设置为 ON。此值确保在集群表中进行的更改保存到二进制日志。

ndb_log_update_as_write

将该参数设置为 OFF。此值可以防止将 UPDATE 语句作为 INSERT 语句写入二进制日志。

ndb_log_updated_only

将该参数设置为 OFF。此值可确保二进制日志包含整个行而不仅仅是更改的列。

将 Amazon 托管的 MySQL 兼容数据库作为 Amazon DMS 的源

您可以使用以下 Amazon 托管的 MySQL 兼容数据库作为 Amazon DMS 的源:

  • MySQL Community Edition

  • MariaDB Community Edition

  • Amazon Aurora MySQL 兼容版

将 Amazon 托管的 MySQL 兼容数据库作为 Amazon DMS 的源时,对于 CDC,请确保满足以下先决条件:

  • 要为 RDS for MySQL 和 RDS for MariaDB 启用二进制日志,请在实例级别启用自动备份。要为 Aurora MySQL 集群启用二进制日志,请更改参数组中的变量 binlog_format

    有关设置自动备份的更多信息,请参阅《Amazon RDS 用户指南》中的使用自动备份

    有关为 Amazon RDS for MySQL 数据库设置二进制日志记录的更多信息,请参阅《Amazon RDS 用户指南》中的设置二进制日志记录格式

    有关为 Aurora MySQL 集群设置二进制日志记录的更多信息,请参阅如何为 Amazon Aurora MySQL 集群开启二进制日志记录?

  • 如果您计划使用 CDC,请启用二进制日志记录。有关为 Amazon RDS for MySQL 数据库设置二进制日志记录的更多信息,请参阅《Amazon RDS 用户指南》中的设置二进制日志记录格式

  • 确保二进制日志对 Amazon DMS 可用。由于 Amazon 托管的 MySQL 兼容数据库会尽快清除二进制日志,您应延长保留这些日志可供使用的时间长度。例如,要将日志保留时间增加到 24 小时,您应运行以下命令。

    call mysql.rds_set_configuration('binlog retention hours', 24);
  • binlog_format 参数设置为 "ROW"

    注意

    在 MySQL 或 MariaDB 上,binlog_format 是一个动态参数,因此您不必重新启动即可使新值生效。但是,新值仅适用于新会话。如果您出于复制目的将 binlog_format 切换为 ROW,则如果这些会话在您更改值之前已启动,则数据库仍可以使用 MIXED 格式创建后续的二进制日志。这可能会使得 Amazon DMS 无法正确捕获源数据库上的所有更改。更改 MariaDB 或 MySQL 数据库的 binlog_format 设置时,请务必重新启动数据库以关闭所有现有会话,或者重新启动任何执行 DML(Data Manipulation Language,数据操作语言)操作的应用程序。将 binlog_format 参数更改为 ROW 后,通过强制数据库重新启动所有会话,可确保您的数据库使用正确的格式写入所有后续的源数据库更改,以便 Amazon DMS 可以正确捕获这些更改。

  • binlog_row_image 参数设置为 "Full"

  • "NONE"于 DMS 版本 3.4.7 或更早版本,将该binlog_checksum参数设置为。有关在 Amazon RDS MySQL 中设置参数的更多信息,请参阅《Amazon RDS 用户指南》中的使用自动备份

  • 如果您使用 Amazon RDS MySQL 或 Amazon RDS MariaDB 只读副本作为源,请在只读副本上启用备份,并确保 log_slave_updates 参数设置为 TRUE

将 MySQL 数据库作为 Amazon DMS 源的限制

使用 MySQL 数据库作为源时,请考虑以下事项:

  • Amazon RDS MySQL 5.5 或更低版本不支持更改数据捕获 (CDC)。对于 Amazon RDS MySQL,您必须使用版本 5.6、5.7 或 8.0 才能启用 CDC。自管理 MySQL 5.5 源支持 CDC。

  • 对于 CDC,CREATE TABLEADD COLUMNDROP COLUMN 更改列数据类型,并支持 renaming a column。但是,不支持 DROP TABLERENAME TABLE 和对其他属性(例如列默认值、列可为 null 值、字符集等)进行更新。

  • 对于源上的分区表,当您将 Target table preparation mode (目标表准备模式) 设置为 Drop tables on target (删除目标中的表) 时,Amazon DMS 将在 MySQL 目标上创建一个没有任何分区的简单表。要将分区表迁移到目标上的分区表,请预先在目标 MySQL 数据库创建分区表。

  • 不支持使用 ALTER TABLE table_name ADD COLUMN column_name 语句将列添加到表的开头 (FIRST) 或中间 (AFTER)。列始终添加到表的末尾。

  • 当表名称包含大写和小写字符且源引擎托管于包含不区分大小写的文件名的操作系统上时,CDC 不受支持。一个示例是使用 HFS+ 的 Microsoft Windows 或 OS X。

  • 您可以使用 Aurora MySQL 兼容版无服务器进行完全加载,但不能将其用于 CDC。这是因为您无法为 MySQL 启用先决条件。有关更多信息,请参阅参数组和 Aurora Serverless v1

  • 列上的 AUTO_INCREMENT 属性不会迁移到目标数据库列。

  • 当二进制日志未存储在标准块存储上时,不支持捕获更改。例如,当二进制日志存储在 Amazon S3 中时,CDC 不会工作。

  • 默认情况下,Amazon DMS 将使用 InnoDB 存储引擎创建目标表。如果您需要使用 InnoDB 之外的存储引擎,则必须手动创建该表并使用 Do nothing (不执行任何操作) 模式迁移到该表。

  • 除非您的 DMS 迁移任务模式为迁移现有数据 – 仅完全加载,否则您不能使用 Aurora MySQL 副本作为 Amazon DMS 的源。

  • 如果与 MySQL 兼容的源在完全加载期间停止,Amazon DMS 任务不会停止,但会出现错误。该任务将成功结束,但目标可能与源不同步。如果发生这种情况,请重新启动该任务或重新加载受影响的表。

  • 在列值的一部分上创建的索引不会迁移。例如,索引 CREATE INDEX first_ten_chars ON customer (名称 (10)) 不在目标上创建。

  • 在某些情况下,任务配置为不复制 LOB(任务设置中的 SupportLobs “” 为 false 或者在任务控制台中选择了 “不包含 LOB 列”)。这些情况下,Amazon DMS 不会将任何 MEDIUMBLOB、LONGBLOB、MEDIUMTEXT 和 LONGTEXT 列迁移到目标。

    BLOB、TINYBLOB、TEXT 和 TINYTEXT 列不会受到影响且将迁移到目标。

  • MariaDB 源数据库和目标数据库不支持临时数据表或系统版本控制表。

  • 如果在两个 Amazon RDS Aurora MySQL 集群之间迁移,则 RDS Aurora MySQL 源端点必须是读/写实例,而不是副本实例。

  • Amazon DMS 目前不支持 MariaDB 的视图迁移。

  • Amazon DMS 不支持 MySQL 分区表的 DDL 更改。要跳过 CDC 期间因分区 DDL 更改而暂停表的情况,请将 skipTableSuspensionForPartitionDdl 设置为 true

  • Amazon DMS 仅支持 3.5.0 版及更高版本的 XA 事务。之前的版本不支持 XA 事务。Amazon DMS 不支持 MariaDB 版本 10.6 中的 XA 事务。有关更多信息,请参阅下面的支持 XA 事务

  • Amazon DMS 不使用 GTID 进行复制,即使源数据包含 GTID 也是如此。

  • Amazon DMS 不支持二进制日志事务压缩。

  • 对于使用 InnoDB 存储引擎的 MySQL 数据库,Amazon DMS 不会传播 ON DELETE CASCADE 和 ON UPDATE CASCADE 事件。对于这些事件,MySQL 不会生成二进制日志事件来反映子表上的级联操作。因此,Amazon DMS 无法将相应的更改复制到子表。有关更多信息,请参见 索引、外键或级联更新内容或删除内容未迁移

  • Amazon DMS 不会捕获对计算(VIRTUALGENERATED ALWAYS)列的更改。要解决此限制,请执行以下操作之一:

    • 在目标数据库中预先创建目标表,然后使用 DO_NOTHINGTRUNCATE_BEFORE_LOAD 完全加载任务设置创建 Amazon DMS 任务。

    • 添加转换规则以从任务范围中移除计算列。有关转换规则的信息,请参阅 转换规则和操作

支持 XA 事务

扩展架构 (XA) 事务用于将来自多个事务资源的一系列操作,分组为单个可靠的全局事务。XA 事务使用两阶段提交协议。通常,在有未处理的 XA 事务时捕获更改可能会导致数据丢失。如果您的数据库不使用 XA 事务,则可以使用默认值 TRUE 忽略此权限和配置 IgnoreOpenXaTransactionsCheck。要开始从具有 XA 事务的源进行复制,请执行以下操作:

  • 确保 Amazon DMS 端点用户具有以下权限:

    grant XA_RECOVER_ADMIN on *.* to 'userName'@'%';
  • 将端点设置 IgnoreOpenXaTransactionsCheck 设置为 false

注意

Amazon DMS 不支持 MariaDB 源数据库 10.6 版本上的 XA 事务。

使用 MySQL 作为 Amazon DMS 的源时的端点设置

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

下表显示了将 MySQL 用作源时您可以使用的端点设置。

名称 描述
EventsPollInterval

指定在数据库处于空闲状态时在二进制日志中查看新更改/事件的频率。

默认值:5

有效值:1-60

例如:--my-sql-settings '{"EventsPollInterval": 5}'

在示例中,Amazon DMS 每 5 秒检查一次二进制日志中的更改。

ExecuteTimeout

对于 Amazon DMS 版本 3.4.7 及更高版本,设置 MySQL 源端点的客户端语句超时时间,以秒为单位。

默认值:60

例如:--my-sql-settings '{"ExecuteTimeout": 1500}'

ServerTimezone

指定源 MySQL 数据库的时区。

例如:--my-sql-settings '{"ServerTimezone": "US/Pacific"}'

AfterConnectScript

指定脚本在 Amazon DMS 连接到终端节点后立即运行。无论 SQL 语句是否成功,迁移任务都会继续运行。

有效值:一个或多个有效的 SQL 语句 (用分号分隔)。

例如:--my-sql-settings '{"AfterConnectScript": "ALTER SESSION SET CURRENT_SCHEMA=system"}'

CleanSrcMetadataOnMismatch

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

默认值:false

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

skipTableSuspensionForPartitionDdl

Amazon DMS 不支持 MySQL 分区表的 DDL 更改。对于 3.4.6 及更高Amazon DMS版本,将此设置为在 CDC 期间更改分区 DDL 时会true跳过暂停表。 Amazon DMS忽略 partitioned-table-related DDL,并继续处理进一步的二进制日志更改。

默认值:false

例如:--my-sql-settings '{"skipTableSuspensionForPartitionDdl": true}'

IgnoreOpenXaTransactionsCheck

对于 Amazon DMS 版本 3.5.0 及更高版本,指定任务在启动时是否应忽略打开的 XA 事务。如果您的源有 XA 事务,则将此项设置为 false

默认值:true

例如:--my-sql-settings '{"IgnoreOpenXaTransactionsCheck": false}'

MySQL 的源数据类型

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

有关如何查看目标中映射的数据类型的信息,请参阅有关所使用的目标终端节点的部分。

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

MySQL 数据类型

Amazon DMS 数据类型

INT

INT4

BIGINT

INT8

MEDIUMINT

INT4

TINYINT

INT1

SMALLINT

INT2

UNSIGNED TINYINT

UINT1

UNSIGNED SMALLINT

UINT2

UNSIGNED MEDIUMINT

UINT4

UNSIGNED INT

UINT4

UNSIGNED BIGINT

UINT8

DECIMAL(10)

NUMERIC (10,0)

BINARY

BYTES(1)

BIT

BOOLEAN

BIT(64)

BYTES(8)

BLOB

BYTES(65535)

LONGBLOB

BLOB

MEDIUMBLOB

BLOB

TINYBLOB

BYTES(255)

DATE

DATE

DATETIME

DATETIME

不带括号值的 DATETIME 复制时不包括毫秒。括号值为 1 到 5 的 DATETIME(例如 DATETIME(5))在复制时包括毫秒。

复制 DATETIME 列时,时间在目标上保持不变。它不会转换为 UTC。

TIME

STRING

TIMESTAMP

DATETIME

复制 TIMESTAMP 列时,目标上的时间会转换为 UTC。

YEAR

INT2

DOUBLE

REAL8

FLOAT

REAL(DOUBLE)

如果 FLOAT 值不在以下范围内,请使用转换将 FLOAT 映射到 STRING。有关转换的更多信息,请参阅 转换规则和操作

支持的 FLOAT 范围是 -1.79E+308 到 -2.23E-308、0 以及 2.23E-308 到 1.79E+308

VARCHAR(45)

WSTRING (45)

VARCHAR(2000)

WSTRING (2000)

VARCHAR(4000)

WSTRING (4000)

VARBINARY (4000)

BYTES (4000)

VARBINARY (2000)

BYTES (2000)

CHAR

WSTRING

TEXT

WSTRING

LONGTEXT

NCLOB

MEDIUMTEXT

NCLOB

TINYTEXT

WSTRING(255)

GEOMETRY

BLOB

POINT

BLOB

LINESTRING

BLOB

POLYGON

BLOB

MULTIPOINT

BLOB

MULTILINESTRING

BLOB

MULTIPOLYGON

BLOB

GEOMETRYCOLLECTION

BLOB

ENUM

WSTRING (长度)

此处的长度是 ENUM 中最长值的长度。

SET

WSTRING (长度)

此处的长度是 SET 中所有值的总长度,包括逗号。

JSON

CLOB

注意

在某些情况下,您可以使用“零”值(即 0000-00-00)来指定 DATETIME 和 TIMESTAMP 数据类型。如果这样做,请确保复制任务中的目标数据库支持 DATETIME 和 TIMESTAMP 数据类型的“零”值。否则,这些值在目标上将被记录为 null。