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

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

使用与 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) 文件中配置以下参数。

参数

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

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

如果您使用 My SQL 或 MariaDB 只读副本作为DMS迁移任务的源,使用 “迁移现有数据” 和 “复制正在进行的更改” 模式,则可能会丢失数据。 DMS在满载期间或在以下条件CDC下都不会写入事务:

  • 在DMS任务开始之前,事务已提交到主实例。

  • 由于主实例和副本之间存在延迟,该事务直到DMS任务开始后才提交到副本。

主实例和副本之间的延迟时间越长,数据丢失的可能性就越大。

如果您的源使用NDB(集群)数据库引擎,则必须将以下参数配置为在使用该存储引擎的表CDC上启用。将这些更改添加到 “我SQL的” my.ini (Windows) 或 my.cnf (UNIX) 文件中。

参数

ndb_log_bin

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

ndb_log_update_as_write

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

ndb_log_updated_only

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

使用与我 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 源。

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

  • 对于源上的分区表,当您将目标表准备模式设置为 “在目标上删除表” 时, Amazon DMS 将在我的SQL目标上创建一个没有任何分区的简单表。要将分区表迁移到目标上的分区表,请在目标 “我的数据库” 上预先创建分区表。SQL

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

  • 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,请将设置skipTableSuspensionForPartitionDdltrue

  • 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 不会捕获对计算(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 事务。

使用 “我的” SQL 作为来源时的终端节点设置 Amazon DMS

您可以使用端点设置来配置 “我的SQL源数据库”,就像使用额外的连接属性一样。您可以在使用 Amazon DMS 控制台创建源端点时指定设置,也可以使用中的create-endpointAmazon CLI命令和--my-sql-settings '{"EndpointSetting": "value", ...}'JSON语法。

下表显示了可以将 “我的” SQL 用作源的终端节点设置。

名称 描述
EventsPollInterval

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

默认值:5

有效值:1-60

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

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

ExecuteTimeout

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

默认值:60

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

ServerTimezone

为源 “我的SQL数据库” 指定时区。

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

AfterConnectScript

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

有效值:一个或多个有效SQL语句,用分号隔开。

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

CleanSrcMetadataOnMismatch

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

默认值:false

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

skipTableSuspensionForPartitionDdl

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

默认值:false

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

IgnoreOpenXaTransactionsCheck

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

默认值:true

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

“我的” 的源数据类型 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(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 (length)

这里length是中最长值的长度ENUM。

SET

WSTRING (length)

以下length是中所有值的总长度SET,包括逗号。

JSON

CLOB

注意

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