本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将与 MySQL 兼容的数据库作为 Amazon DMS 源
你可以使用 Database Migration Service 从任何兼容 MySQL 的数据库(MySQL、MariaDB 或 Amazon Aurora MySQL)迁移数据。Amazon
有关Amazon DMS支持作为源的 MySQL 版本的信息,请参阅Amazon DMS 的源。
您可以使用 SSL 来加密 MySQL 兼容终端节点与复制实例之间的连接。有关将 SSL 用于 MySQL 兼容终端节点的更多信息,请参阅将 SSL 与 Amazon Database Migration Service 配合使用。
在以下各节中,“自我管理” 一词适用于安装在本地或 Amazon EC2 上的任何数据库。“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 的账户。该角色需要以下权限:
-
复制客户端-此权限仅适用于 CDC 任务。换句话说, full-load-only 任务不需要此权限。
-
复制从属服务器 — 此权限仅适用于 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) 文件中配置以下参数。
参数 |
值 |
---|---|
|
将该参数设置为 1 或更大的值。 |
|
设置二进制日志文件的路径,例如 |
|
将该参数设置为 |
|
将该参数设置为 1 或更大的值。为防止过度使用磁盘空间,我们建议您不要使用默认值 0。 |
|
将该参数设置为 |
|
将该参数设置为 |
|
如果您使用 MySQL 或 MariaDB 只读副本作为源,请将此参数设置为 |
如果您的源使用了 NDB (群集式) 数据库引擎,则必须配置以下参数以对使用该存储引擎的表启用 CDC。请在 MySQL 的 my.ini
(Windows) 或 my.cnf
(UNIX) 文件中添加这些更改。
参数 |
值 |
---|---|
|
将该参数设置为 |
|
将该参数设置为 |
|
将该参数设置为 |
使用Amazon托管的 MySQL 兼容数据库作为源 Amazon DMS
您可以使用以下Amazon托管的 MySQL 兼容数据库作为源:Amazon DMS
-
MySQL Community Edition
-
MariaDB Community Edition
-
Amazon Aurora MySQL 兼容版
使用与Amazon托管的 MySQL 兼容数据库作为源时Amazon DMS,请确保您满足以下使用 CDC 的先决条件:
-
要为适用于 MySQL 的 RDS 和适用于 MariaDB 的 RDS 启用二进制日志,请在实例级别启用自动备份。要为 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
是一个动态参数,因此您无需重新启动即可使新值生效。但是,新值仅适用于新会话。如果您ROW
出于复制目的将切换binlog_format
到该格式,则如果这些会话是在您更改值之前启动的,则数据库仍可以使用该MIXED
格式创建后续的二进制日志。这可能会Amazon DMS阻止正确捕获源数据库上的所有更改。更改 MariaDB 或 MySQL 数据库的binlog_format
设置时,请务必重新启动数据库以关闭所有现有会话,或者重新启动任何执行 DML(数据操作语言)操作的应用程序。将binlog_format
参数更改为后强制数据库重新启动所有会话ROW
将确保您的数据库使用正确的格式写入所有后续的源数据库更改,以便Amazon DMS可以正确捕获这些更改。 -
将
binlog_row_image
参数设置为"Full"
。 -
将
binlog_checksum
参数设置为"NONE"
。有关在 Amazon RDS MySQL 中设置参数的更多信息,请参阅 Amazon RDS 用户指南中的使用自动备份。 -
如果您使用 Amazon RDS MySQL 或 Amazon RDS MariaDB 只读副本作为源,请在只读副本上启用备份,并确保将
log_slave_updates
参数设置为。TRUE
将 MySQL 数据库作为 Amazon DMS 源的限制
使用 MySQL 数据库作为源时,请考虑以下事项:
-
亚马逊 RDS MySQL 5.5 或更低版本不支持更改数据捕获 (CDC)。对于 Amazon RDS MySQL,您必须使用 5.6、5.7 或 8.0 版本才能启用 CDC。自我管理的 MySQL 5.5 源支持 CDC。
-
对于 CDC
CREATE TABLE
,支持ADD COLUMN
、、和DROP COLUMN
更改列数据类型renaming a column
,并支持。但是,不RENAME TABLE
支持DROP TABLE
、和对其他属性(例如列默认值、列可空性、字符集等)所做的更新。 -
对于源上的分区表,当您将 Target table preparation mode (目标表准备模式) 设置为 Drop tables on target (删除目标中的表) 时,Amazon DMS 将在 MySQL 目标上创建一个没有任何分区的简单表。要将分区表迁移到目标上的分区表,请在目标 MySQL 数据库上预创建分区表。
-
不支持使用
ALTER TABLE
语句将列添加到表的开头 (FIRST) 或中间 (AFTER)。列始终添加到表的末尾。table_name
ADD COLUMNcolumn_name
-
当表名称包含大写和小写字符且源引擎托管于包含不区分大小写的文件名的操作系统上时,CDC 不受支持。一个例子是使用 HFS+ 的微软 Windows 或 OS X。
-
你可以使用兼容 Aurora MySQL 的 Edition Serverless 进行满负载,但不能将其用于 CDC。这是因为你无法启用 MySQL 的先决条件。有关更多信息,请参阅参数组和 Aurora Serverless v1。
-
列上的 AUTO_INCREMENT 属性不会迁移到目标数据库列。
-
当二进制日志未存储在标准块存储上时,不支持捕获更改。例如,当二进制日志存储在 Amazon S3 上时,CDC 不起作用。
-
默认情况下,Amazon DMS 将使用 InnoDB 存储引擎创建目标表。如果您需要使用 InnoDB 之外的存储引擎,则必须手动创建该表并使用 Do nothing (不执行任何操作) 模式迁移到该表。
-
除非您的 DMS 迁移任务模式为 “迁移现有数据 — 仅限满载”,Amazon DMS否则您不能使用 Aurora MySQL 副本作为源。
-
如果与 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 事务。有关更多信息,请参阅下面的Support 对 XA 事务的支持。
-
Amazon DMS不使用 GTID 进行复制,即使源数据包含 GTID。
-
Amazon DMS不支持二进制日志事务压缩。
-
Amazon DMS不会在使用 InnoDB 存储引擎的 MySQL 数据库的 “删除级联” 和 “更新时级联” 事件进行传播。对于这些事件,MySQL 不会生成二进制日志事件来反映子表上的级联操作。因此,Amazon DMS无法将相应的更改复制到子表。有关更多信息,请参阅索引、外键或级联更新或删除未迁移:
-
Amazon DMS不会捕获对计算(
VIRTUAL
和GENERATED ALWAYS
)列的更改。要变通此限制,请执行以下操作:在目标数据库中预先创建目标表,然后使用
DO_NOTHING
或TRUNCATE_BEFORE_LOAD
满载Amazon DMS任务设置创建任务。添加转换规则以将计算列从任务范围中移除。有关转换规则的信息,请参见 转换规则和操作。
Support 对 XA 事务的支持
扩展架构 (XA) 事务是一种事务,可用于将来自多个事务资源的一系列操作分组为单个可靠的全局事务。XA 事务使用两阶段提交协议。通常,在存在未处理的 XA 事务时捕获更改可能会导致数据丢失。如果您的数据库不使用 XA 事务,则可以使用默认值忽略此权限和配置IgnoreOpenXaTransactionsCheck
。TRUE
要开始从具有 XA 事务的源进行复制,请执行以下操作:
确保终Amazon DMS端用户具有以下权限:
grant XA_RECOVER_ADMIN on *.* to 'userName'@'%';
将终端节点设置设置
IgnoreOpenXaTransactionsCheck
为false
。
注意
Amazon DMS不支持 MariaDB 源数据库 10.6 版本上的 XA 事务。
使用 MySQL 作为来源时的端点设置 Amazon DMS
您可以使用端点设置来配置 MySQL 源数据库,就像使用额外的连接属性一样。您可以在使用Amazon DMS控制台创建源端点时指定设置,或者使用中带有 --my-sql-settings '{"
JSON 语法的EndpointSetting"
:
"value"
, ...
}'create-endpoint
Amazon CLI命令来指定设置。
下表显示了可以将 MySQL 用作源的终端节点设置。
名称 | 描述 |
---|---|
EventsPollInterval |
指定在数据库处于空闲状态时在二进制日志中查看新更改/事件的频率。 默认值:5 有效值:1—60 示例: 在示例中,Amazon DMS 每 5 秒检查一次二进制日志中的更改。 |
ExecuteTimeout |
对于 3.4.7 及更高Amazon DMS版本,设置 MySQL 源端点的客户端语句超时时间,以秒为单位。 默认值:60 示例: |
ServerTimezone |
指定源 MySQL 数据库的时区。 示例: |
AfterConnectScript |
指定脚本在 Amazon DMS 连接到终端节点后立即运行。无论 SQL 语句是否成功,迁移任务都会继续运行。 有效值:一个或多个有效的 SQL 语句 (用分号分隔)。 示例: |
CleanSrcMetadataOnMismatch
|
出现不匹配情况时在复制实例上清除并重新创建表元数据信息。例如,对表运行更改 DDL 可能会产生有关在复制实例中缓存的表的不同信息。布尔值。 默认值: 示例: |
skipTableSuspensionForPartitionDdl
|
Amazon DMS不支持 MySQL 分区表的 DDL 更改。对于 3.4.6 及更高Amazon DMS版本,将此设置为在 CDC 期间更改分区 DDL 时会 默认值: 示例: |
IgnoreOpenXaTransactionsCheck
|
对于 3.5.0 及更高Amazon DMS版本,指定任务在启动时是否应忽略打开的 XA 事务。 默认值: 示例: |
MySQL 的源数据类型
下表列出了使用 Amazon DMS 时支持的 MySQL 数据库源数据类型以及来自 Amazon DMS 数据类型的默认映射。
有关如何查看目标中映射的数据类型的信息,请参阅有关所使用的目标终端节点的部分。
有关 Amazon DMS 数据类型的其他信息,请参阅Database MigratiAmazon on Service 数据类型。
MySQL 数据类型 |
Amazon DMS 数据类型 |
---|---|
INT |
INT4 |
BIGINT |
INT8 |
MEDIUMINT |
INT4 |
TINYINT |
INT1 |
SMALLINT |
INT2 |
UNSIGNED TINYINT |
UINT1 |
UNSIGNED SMALLINT |
UINT2 |
未签名 MEDIUMINT |
UINT4 |
无符号整数 |
UINT4 |
UNSIGNED BIGINT |
UINT8 |
DECIMAL(10) |
NUMERIC (10,0) |
BINARY |
BYTES(1) |
BIT |
BOOLEAN |
BIT(64) |
BYTES(8) |
BLOB |
字节 (65535) |
LONGBLOB |
BLOB |
MEDIUMBLOB |
BLOB |
TINYBLOB |
BYTES(255) |
DATE |
DATE |
DATETIME |
DATETIME 不带括号值的 DATETIME 复制时不带毫秒。括号值为 1 到 5 的 DATETIME(例如 复制 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( 在这里, |
SET |
WSTRING( 在这里, |
JSON |
CLOB |
注意
在某些情况下,您可以使用 “零” 值(即 0000-00-00)来指定 DATETIME 和 TIMESTAMP 数据类型。如果是,请确保复制任务中的目标数据库支持 DATETIME 和 TIMESTAMP 数据类型的 “零” 值。否则,这些值在目标上将被记录为 null。