本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用与 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 版本才能启用。CDC CDC支持自行管理的 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。