本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用与 SQL My 兼容的数据库作为源 Amazon DMS
你可以使用 Database Migration SQL Service 从任何与我兼容的数据库(我的SQL、MariaDB 或 Amazon Aurora M SQL y) Amazon 迁移数据。
有关 Amazon DMS 支持作为来源的 My SQL 版本的信息,请参阅的来源 Amazon DMS。
您可以使用SSL对与 My SQL 兼容的终端节点和复制实例之间的连接进行加密。有关使用SSL与 My SQL 兼容的终端节点的更多信息,请参阅将 SSL 与 Amazon Database Migration Service。
在以下各节中,“自我管理” 一词适用于安装在本地或 Amazon EC2 上的任何数据库。“Amazon托管” 一词适用于亚马逊RDS、亚马逊 Aurora 或 Amazon S3 上的任何数据库。
有关使用与 My SQL 兼容的数据库和的更多详细信息 Amazon DMS,请参阅以下各节。
主题
SQL使用从 “我的” 迁移SQL到 “我的” Amazon DMS
对于异构迁移,即从 “我” 之外的数据库引擎迁移SQL到 “我的SQL数据库”,几乎 Amazon DMS 总是最好的迁移工具。但是,对于同构迁移,即从 “我的数据库” 迁移到 “我的SQLSQL数据库”,我们建议您使用同构数据迁移迁移项目。与之相比,同构数据迁移使用本机数据库工具来提高数据迁移性能和准确性。 Amazon DMS
使用任何SQL与 My 兼容的数据库作为源 Amazon DMS
在开始使用 “我的SQL数据库” 作为源之前 Amazon DMS,请确保满足以下先决条件。这些先决条件适用于自行管理或由管理的 Amazon来源。
您必须拥有一个 Amazon DMS 具有复制管理员角色的帐户。该角色需要以下权限:
-
REPLICATIONCLIENT— 只有CDC任务才需要此权限。换句话说, full-load-only任务不需要此权限。
-
REPLICATIONSLAVE— 只有CDC任务才需要此权限。换句话说, full-load-only任务不需要此权限。
-
SUPER— 只有在 5.6.6 之前的 “我的SQL版本” 中才需要此权限。
Amazon DMS 用户还必须对指定用于复制的源表具有SELECT权限。
如果您使用我的SQL特定预迁移评估,请授予以下权限。
grant select on mysql.user to <dms_user>; grant select on mysql.db to <dms_user>; grant select on mysql.tables_priv to <dms_user>; grant select on mysql.role_edges to <dms_user> #only for MySQL version 8.0.11 and higher
使用自我管理的 SQL My 兼容数据库作为源 Amazon DMS
您可以使用以下自我管理的 “我的SQL兼容” 数据库作为来源: Amazon DMS
-
我的SQL社区版
-
我的SQL标准版
-
我的SQL企业版
-
我的SQL集群运营商级版
-
MariaDB Community Edition
-
MariaDB Enterprise Edition
-
MariaDB Column Store
要使用CDC,请确保启用二进制日志记录。要启用二进制日志记录,必须在 My SQL my.ini
(Windows) 或 my.cnf
(UNIX) 文件中配置以下参数。
参数 |
值 |
---|---|
|
将该参数设置为 1 或更大的值。 |
|
设置二进制日志文件的路径,例如 |
|
将该参数设置为 |
|
将该参数设置为 1 或更大的值。为防止过度使用磁盘空间,我们建议您不要使用默认值 0。 |
|
|
|
将该参数设置为 |
|
|
如果您使用 My SQL 或 MariaDB 只读副本作为DMS迁移任务的源,使用 “迁移现有数据” 和 “复制正在进行的更改” 模式,则可能会丢失数据。DMS在满载期间或在以下条件CDC下都不会写入事务:
在DMS任务开始之前,事务已提交到主实例。
由于主实例和副本之间存在延迟,该事务直到DMS任务开始后才提交到副本。
主实例和副本之间的延迟时间越长,数据丢失的可能性就越大。
如果您的源使用NDB(集群)数据库引擎,则必须将以下参数配置为在使用该存储引擎的表CDC上启用。将这些更改添加到 “我SQL的” my.ini
(Windows) 或 my.cnf
(UNIX) 文件中。
参数 |
值 |
---|---|
|
将该参数设置为 |
|
将该参数设置为 |
|
将该参数设置为 |
使用与我 Amazon管理的 SQL My 兼容数据库作为源 Amazon DMS
您可以使用以下 Amazon托管的 “我的SQL兼容” 数据库作为源: Amazon DMS
-
我的SQL社区版
-
MariaDB Community Edition
-
亚马逊 Aurora 我的SQL兼容版
使用与 Amazon My SQL 兼容的 My managed 数据库作为源时 Amazon DMS,请确保满足以下先决条件:CDC
-
要为 RDS My SQL 和 MariaDB 启用二进制日志,请在实例级别启用自动备份。RDS要为 Aurora My SQL 集群启用二进制日志,请更改参数组
binlog_format
中的变量。有关设置自动备份的更多信息,请参阅 Amazon RDS 用户指南中的使用自动备份。
有关为 A RDS mazon for My SQL 数据库设置二进制日志记录的更多信息,请参阅《亚马逊RDS用户指南》中的设置二进制日志格式。
有关为 Aurora 我的SQL集群设置二进制日志的更多信息,请参阅如何为我的 Amazon Aurora 我的SQL集群开启二进制日志记录?
。 -
如果您打算使用CDC,请开启二进制日志记录。有关为 A RDS mazon for My SQL 数据库设置二进制日志记录的更多信息,请参阅《亚马逊RDS用户指南》中的设置二进制日志格式。
-
确保二进制日志可供使用 Amazon DMS。由于 Amazon-managed My SQL 兼容的数据库会尽快清除二进制日志,因此您应该延长日志的可用时间。例如,要将日志保留时间增加到 24 小时,您应运行以下命令。
call mysql.rds_set_configuration('binlog retention hours', 24);
-
将
binlog_format
参数设置为"ROW"
。注意
在 My SQL 或 MariaDB 上,
binlog_format
是一个动态参数,因此您无需重启即可使新值生效。但是,新值仅适用于新会话。如果您出于复制目的将binlog_format
切换为ROW
,则如果这些会话在您更改值之前已启动,则数据库仍可以使用MIXED
格式创建后续的二进制日志。这可能会 Amazon DMS 阻止正确捕获源数据库上的所有更改。更改 MariaDB 或 “我的SQL数据库” 的binlog_format
设置时,请务必重新启动数据库以关闭所有现有会话,或者重新启动任何执行DML(数据操纵语言)操作的应用程序。将binlog_format
参数更改为后强制数据库重新启动所有会话ROW
将确保您的数据库使用正确的格式写入所有后续的源数据库更改,以便 Amazon DMS 可以正确捕获这些更改。 -
将
binlog_row_image
参数设置为"Full"
。 -
将DMS版本 3.4.7 或更早版本
"NONE"
的binlog_checksum
参数设置为。有关在 Amazon M RDS y 中设置参数的更多信息SQL,请参阅《亚马逊RDS用户指南》中的使用自动备份。 -
如果您使用 Amazon M RDS y SQL 或 Amazon RDS MariaDB 只读副本作为源,请在只读副本上启用备份,并确保将
log_slave_updates
参数设置为。TRUE
使用 “我的SQL数据库” 作为来源的限制 Amazon DMS
使用 “我的SQL数据库” 作为源时,请考虑以下几点:
-
Amazon M RDS y SQL 5.5 或更低版本不支持更改数据捕获 (CDC)。对于 Amazon M RDS ySQL,您必须使用 5.6、5.7 或 8.0 版本才能启用。CDCCDC支持自行管理的 My SQL 5.5 源。
-
支持CDC、
CREATE TABLE
ADD COLUMN
、、和DROP COLUMN
更改列数据类型renaming a column
,并支持。但是,不支持DROP TABLE
、RENAME TABLE
和对其他属性(例如列默认值、列可为 null 值、字符集等)进行更新。 -
对于源上的分区表,当您将目标表准备模式设置为 “在目标上删除表” 时, Amazon DMS 将在我的SQL目标上创建一个没有任何分区的简单表。要将分区表迁移到目标上的分区表,请在目标 “我的数据库” 上预先创建分区表。SQL
-
不支持使用
ALTER TABLE
语句将列添加到表的开头 (FIRST) 或中间 (AFTER)。列始终添加到表的末尾。table_name
ADD COLUMNcolumn_name
-
CDC如果表名包含大写和小写字符,并且源引擎托管在文件名不区分大小写的操作系统上,则不支持。一个例子是使用 HFS + 的微软 Windows 或 OS X。
-
你可以使用 Aurora 我的SQL兼容版 Serverless v1 进行满载,但你不能将其用于。CDC这是因为您无法为 “我的” 启用先决条件SQL。有关更多信息,请参阅参数组和 Aurora Serverless v1。
Aurora 我的SQL兼容版无服务器 v2 支持。CDC
-
列上的 AUTO _ INCREMENT 属性不会迁移到目标数据库列。
-
当二进制日志未存储在标准块存储上时,不支持捕获更改。例如,当二进制日志存储在 Amazon S3 上时,CDC不起作用。
-
Amazon DMS 默认使用InnoDB存储引擎创建目标表。如果您需要使用 InnoDB 之外的存储引擎,则必须手动创建该表并使用 Do nothing (不执行任何操作) 模式迁移到该表。
-
Amazon DMS 除非您的DMS迁移任务模式SQL为 “迁移现有数据 — 仅限满载”,否则您不能将 Aurora My 副本用作源。
-
如果我的SQL兼容源在满载期间停止,则 Amazon DMS 任务不会因错误而停止。该任务将成功结束,但目标可能与源不同步。如果发生这种情况,请重新启动该任务或重新加载受影响的表。
-
在列值的一部分上创建的索引不会迁移。例如,未在目标上创建客户(名称 (10))上的索引 f CREATE INDEX irst_ten_chars。
-
在某些情况下,任务被配置为不复制LOBs(任务设置中的 SupportLobs “” 为 false 或者在任务控制台中选择了 “不包含LOB列”)。在这些情况下, Amazon DMS 不会将任何MEDIUMBLOB、LONGBLOBMEDIUMTEXT、和LONGTEXT列迁移到目标。
BLOB、TINYBLOBTEXT、和TINYTEXT列不受影响,会迁移到目标。
-
MariaDB 源数据库和目标数据库不支持临时数据表或系统版本控制表。
-
如果在两个 Amazon A RDS urora 我的SQL集群之间迁移,则 RDS Aurora 我的SQL源终端节点必须是读/写实例,而不是副本实例。
-
Amazon DMS 目前不支持 MariaDB 的视图迁移。
-
Amazon DMS 不支持DDL更改 My SQL 的分区表。要在分区DDL更改期间跳过暂停表CDC,请将设置
skipTableSuspensionForPartitionDdl
为true
。 -
Amazon DMS 仅支持 3.5.0 及更高版本中的 XA 事务。以前的版本不支持 XA 事务。 Amazon DMS 不支持 MariaDB 版本 10.6 中的 XA 事务。有关更多信息,请参阅下面的支持 XA 事务。
-
Amazon DMS 不GTIDs用于复制,即使源数据包含它们也是如此。
-
Amazon DMS 不支持 Aurora 我的SQL增强型二进制日志。
-
Amazon DMS 不支持二进制日志事务压缩。
-
Amazon DMS 不会使用InnoDB存储引UPDATECASCADE擎为我的SQL数据库传播开启DELETECASCADE和开启事件。对于这些事件,SQLMy 不会生成二进制日志事件来反映子表上的级联操作。因此, Amazon DMS 无法将相应的更改复制到子表。有关更多信息,请参阅 索引、外键或级联更新内容或删除内容未迁移。
-
Amazon DMS 不会捕获对计算(
VIRTUAL
和GENERATED ALWAYS
)列的更改。要解决此限制,请执行以下操作之一:在目标数据库中预先创建目标表,然后使用
DO_NOTHING
或TRUNCATE_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 事务。
使用 “我的” SQL 作为来源时的终端节点设置 Amazon DMS
您可以使用端点设置来配置 “我的SQL源数据库”,就像使用额外的连接属性一样。您可以在使用 Amazon DMS 控制台创建源端点时指定设置,也可以使用中的create-endpoint
Amazon CLI命令和--my-sql-settings '{"
JSON语法。EndpointSetting"
:
"value"
, ...
}'
下表显示了可以将 “我的” SQL 用作源的终端节点设置。
名称 | 描述 |
---|---|
EventsPollInterval |
指定在数据库处于空闲状态时在二进制日志中查看新更改/事件的频率。 默认值:5 有效值:1-60 例如: 在示例中,每五秒钟 Amazon DMS 检查一次二进制日志中的更改。 |
ExecuteTimeout |
对于 3.4.7 及更高 Amazon DMS 版本,设置我的SQL源端点的客户端语句超时时间,以秒为单位。 默认值:60 例如: |
ServerTimezone |
为源 “我的SQL数据库” 指定时区。 例如: |
AfterConnectScript |
指定要在 Amazon DMS 连接到端点后立即运行的脚本。无论SQL语句成功还是失败,迁移任务都会继续运行。 有效值:一个或多个有效SQL语句,用分号隔开。 例如: |
CleanSrcMetadataOnMismatch
|
出现不匹配情况时在复制实例上清除并重新创建表元数据信息。例如,在表DDL上运行 alter 可能会导致复制实例中缓存的有关表的不同信息时。布尔值。 默认值: 例如: |
skipTableSuspensionForPartitionDdl
|
Amazon DMS 不支持DDL更改 My SQL 的分区表。对于 3.4.6 及更高 Amazon DMS 版本,将此设置为会 默认值: 例如: |
IgnoreOpenXaTransactionsCheck
|
对于 3.5.0 及更高 Amazon DMS 版本,指定任务在启动时是否应忽略打开的 XA 事务。如果您的源有 XA 事务,则将此项设置为 默认值: 例如: |
“我的” 的源数据类型 SQL
下表显示了使用时支持的 “我的SQL数据库” 源数据类型 Amazon DMS 以及 Amazon DMS 数据类型的默认映射。
有关如何查看目标中映射的数据类型的信息,请参阅有关所使用的目标终端节点的部分。
有关 Amazon DMS 数据类型的更多信息,请参见Amazon Database Migration Service 的数据类型。
我的SQL数据类型 |
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不带括号值的复制不带毫秒。DATETIME括号中的值为 1 到 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 ( 这里, |
SET |
WSTRING ( 这里, |
JSON |
CLOB |
注意
在某些情况下,您可以使用 “零” 值(即 0000-00-00)来指定DATETIME和TIMESTAMP数据类型。如果是,请确保复制任务中的目标数据库支持DATETIME和TIMESTAMP数据类型的 “零” 值。否则,这些值在目标上将被记录为 null。