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

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

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

您可以使用从任何与 MySQL 兼容的数据库(MySQL、MariaDB 或 Amazon Aurora MySQL)中迁移数据。AmazonDatabase Migration Service。MySQL 版本 5.5、5.6、5.7 和 8.0。支持本地部署使用 MariaDB 版本 10.0.24 到 10.0.28、10.1、10.2、10.3、10.4 和 10.5 以及 Amazon Aurora MySQL。

注意

Support 将 MySQL 8.0 作为源作为源,请参阅Amazon DMS版本 3.4.0 及更高版本,但事务负载被压缩时除外。Amazon DMS当前不支持在启用二进制日志加密时使用 MySQL 8.0 作为源的 CDC 复制。

您可以使用 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 数据库时,本机工具效率更高。

我们建议您在以下条件下使用本机 MySQL 数据库迁移工具(例如 mysqldump):

  • 您有一个从源 MySQL 数据库向目标 MySQL 数据库的同构迁移。

  • 您正在迁移整个数据库。

  • 利用这些本机工具,可以在迁移您的数据时最大程度地减少停机时间。

您可以将数据从现有 MySQL 或 MariaDB 数据库导入到 Amazon RDS MySQL 或 MariaDB 数据库实例。为此,请使用 mysqldump 复制数据库,然后通过管道将其直接传输到 Amazon RDS MySQL 或 MariaDB 数据库实例。mysqldump 命令行实用工具通常用于创建备份以及将数据从一个 MySQL 或 MariaDB 服务器传输到另一个 MySQL 或 MariaDB 服务器。该实用程序包含在 MySQL 和 MariaDB 客户端软件中。

有关将 MySQL 数据库导入 Amazon RDS for MySQL 或 Amazon Aurora MySQL 兼容版本的更多信息,请参阅将数据导入 MySQL 数据库实例将数据从 MySQL 或 MariaDB 数据库导入到 Amazon RDS MySQL 或 MariaDB 数据库实例.

使用 Amazon DMS 将数据从 MySQL 迁移到 MySQL

Amazon DMS举例而言,可以将数据从本地源 MySQL 数据库迁移到目标 Amazon RDS for MySQL 或 Aurora MySQL 实例。核心或基本 MySQL 数据类型通常可以成功迁移。

源数据库上支持但目标数据库上不支持的数据类型可能无法成功迁移。如果数据类型未知,Amazon DMS 会将一些数据类型作为字符串进行流式处理。对于某些数据类型(例如 XML 和 JSON),如果文件较小则可以成功迁移,但如果是较大的文档,迁移会失败。

下表显示了源 MySQL 数据类型以及是否可以成功迁移这些数据类型。

数据类型 成功迁移 将部分迁移 不迁移
INT X
BIGINT X
MEDIUMINT X
TINYINT X
DECIMAL (p,s) X
BINARY X
BIT (M) X
BLOB X
LONGBLOB X
MEDIUMBLOB X
TINYBLOB X
DATE X
DATETIME X
TIME X
TIMESTAMP X
YEAR X
DOUBLE X
FLOAT X
VARCHAR(N) X
VARBINARY(N) X
CHAR(N) X
TEXT X
LONGTEXT X
MEDIUMTEXT X
TINYTEXT X
JSON X
GEOMETRY X
POINT X
LINESTRING X
POLYGON X
MULTILINESTRING X
MULTIPOLYGON X
GEOMETRYCOLLECTION X
ENUM X
SET X

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

参数

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

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托管数据库作为Amazon DMS

您可以使用以下Amazon托管数据库作为Amazon DMS:

  • MySQL Community Edition

  • MariaDB Community Edition

  • Amazon Aurora MySQL-Compatible Edition

使用Amazon托管数据库作为Amazon DMS,请确保您具有以下先决条件:

  • 启用自动备份。有关设置自动备份的详细信息,请参阅。使用自动备份中的Amazon RDS 用户指南.

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

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

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

    注意

    对于 MariaDB,如果binlog_format参数切换到ROW为了复制目的,后续的二进制日志仍然在MIXED格式的日期和时间。这可能会阻止 DMS 执行更改数据捕获。因此,当切换binlog_format参数,请执行重新启动或启动然后停止复制任务。

  • binlog_checksum 参数设置为 "NONE". 有关设置 Amazon RDS MySQL 中的参数的更多信息,请参阅使用自动备份中的Amazon RDS 用户指南.

  • 如果您使用 Amazon RDS MySQL 或 Amazon RDS MariaDB 只读副本作为源,请在只读副本上启用备份。

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

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

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

  • 对于 CDC 来说,CREATE TABLEADD COLUMN, 和DROP COLUMN更改列数据类型,renaming a column支持。然而,DROP TABLERENAME TABLE以及对其他属性(如列缺省值、列可空性、字符集等)所做的更新不受支持。

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

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

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

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

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

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

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

  • 不能使用 Aurora MySQL 只读副本作为源Amazon DMS除非您的 DMS 迁移任务模式为迁移现有数据— 仅满载。

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

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

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

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

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

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

  • Amazon DMS目前不支持 MySQL 8.0.20 中引入的压缩事务日志负载。

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

  • Amazon DMS不支持对 MySQL 的分区表进行 DDL 更改。

  • Amazon DMS当前不支持 XA 事务。

将 MySQL 作为 Amazon DMS 源时的额外连接属性

您可以使用附加连接属性来配置 MySQL 源。在创建源终端节点时,您可以指定这些设置。如果您具有多个连接属性设置,请用分号将它们彼此分开,并且不需要额外的空格(例如,oneSetting;thenAnother)。

下表显示了将 Amazon RDS MySQL 用作源时的可用额外连接属性。AmazonDMS.

名称 描述
eventsPollInterval

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

默认值:5

有效值:1—60

示例:eventsPollInterval=5;

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

serverTimezone

指定源 MySQL 数据库的时区。

示例:serverTimezone=US/Pacific;

不要将时区数据放在单引号内。

afterConnectScript

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

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

示例:afterConnectScript=ALTER SESSION SET CURRENT_SCHEMA = system;

CleanSrcMetadataOnMismatch

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

默认值:false

示例:CleanSrcMetadataOnMismatch=false;

MySQL 的源数据类型

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

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

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

MySQL 数据类型

Amazon DMS 数据类型

INT

INT4

MEDIUMINT

INT4

BIGINT

INT8

TINYINT

INT1

DECIMAL(10)

NUMERIC (10,0)

BINARY

BYTES(1)

BIT

BOOLEAN

BIT(64)

BYTES(8)

BLOB

BYTES(66535)

LONGBLOB

BLOB

MEDIUMBLOB

BLOB

TINYBLOB

BYTES(255)

DATE

DATE

DATETIME

DATETIME

TIME

STRING

TIMESTAMP

DATETIME

YEAR

INT2

DOUBLE

REAL8

FLOAT

REAL(DOUBLE)

支持的 FLOAT 范围是 -1.79E+308 到 -2.23E-308,0 和 2.23E-308 到 1.79E+308

如果 FLOAT 值不在此范围内,则将 FLOAT 数据类型映射到 STRING 数据类型。

VARCHAR(45)

WSTRING (45)

VARCHAR(2000)

WSTRING (2000)

VARCHAR(4000)

WSTRING (4000)

VARBINARY (4000)

BYTES (4000)

VARBINARY (2000)

BYTES (2000)

CHAR

WSTRING

TEXT

WSTRING

JSON

NCLOB

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 中所有值的总长度,包括逗号。

注意

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