AWS Database Migration Service
用户指南 (版本 API Version 2016-01-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

您可以使用 AWS Database Migration Service 从任何与 MySQL 兼容的数据库(MySQL、MariaDB 或 Amazon Aurora MySQL)中迁移数据。支持将 MySQL 版本 5.5、5.6 和 5.7,MariaDB 版本 10.0.24 到 10.0.28、10.1、10.2 和 10.3,以及 Amazon Aurora MySQL 用于本地部署。也支持将这些 AWS 托管 MySQL 数据库(Amazon RDS for MySQL、Amazon RDS for MariaDB、Amazon Aurora MySQL)作为 AWS DMS 的源。

您可以使用 SSL 来加密 MySQL 兼容终端节点与复制实例之间的连接。有关将 SSL 用于 MySQL 兼容终端节点的更多信息,请参阅将 SSL 与 AWS Database Migration Service 配合使用

在以下各节中,术语“自管理”适用于在本地安装或在 Amazon EC2 上安装的任何数据库。术语“Amazon 托管”适用于 Amazon RDS、Amazon Aurora 或 Amazon S3 上的任何数据库。

有关使用与 MySQL 兼容的数据库和 AWS DMS 的其他详细信息,请参阅以下章节。

使用 AWS DMS 从 MySQL 迁移到 MySQL

对于异构迁移,从 MySQL 之外的数据库引擎迁移到 MySQL 数据库时,AWS 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 数据库实例

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

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

源数据库上支持但目标数据库上不支持的数据类型可能无法成功迁移。如果数据类型未知,AWS 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
GEOMETRY X
POINT X
LINESTRING X
POLYGON X
MULTILINESTRING X
MULTIPOLYGON X
GEOMETRYCOLLECTION X
ENUM X
SET X

将与 MySQL 兼容的任何数据库用作 AWS DMS 的源

在开始将 MySQL 数据库作为 AWS DMS 源之前,请确保满足以下先决条件。这些先决条件适用于自管理源或 Amazon 托管源。

您必须拥有具有复制管理员角色的 AWS DMS 的账户。该角色需要以下权限:

  • REPLICATION CLIENT – 仅更改数据捕获 (CDC) 任务需要此权限。换而言之,full-load-only 任务不需要此权限。

  • REPLICATION SLAVE – 仅更改数据捕获 (CDC) 任务需要此权限。换而言之,full-load-only 任务不需要此权限。

  • SUPER – 仅 MySQL 5.6.6 之前的版本需要此权限。

AWS DMS 用户还必须具有为复制指定的源表的 SELECT 权限。

将与 MySQL 兼容的自管理数据库作为 AWS DMS 的源

您可以使用以下与 MySQL 兼容的自管理数据库作为 AWS 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

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。此值可确保二进制日志包含整个行而不仅仅是更改的列。

将与 MySQL 兼容的 Amazon 托管数据库用作 AWS DMS 的源

您可以使用以下与 MySQL 兼容的 Amazon 托管数据库作为 AWS DMS 的源:

  • MySQL Community Edition

  • MariaDB Community Edition

  • Amazon Aurora 与 MySQL 的兼容性

将与 MySQL 兼容的 Amazon 托管数据库用作 AWS DMS 的源时,请确保满足以下先决条件:

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

  • 如果您计划使用更改数据捕获 (CDC),请启用二进制日志记录。有关为 Amazon RDS MySQL 数据库设置二进制日志记录的更多信息,请参阅 Amazon RDS 用户指南 中的使用自动备份

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

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

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

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

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

将 MySQL 数据库作为源时,AWS DMS 不支持以下功能:

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

  • 不支持数据定义语言 (DDL) 语句 DROP TABLE 和 RENAME TABLE。此外,不支持分区表的所有 DDL 语句。

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

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

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

  • 不支持 AR_H_USER 标题列。

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

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

  • 默认情况下,AWS DMS 将使用 InnoDB 存储引擎创建目标表。如果您需要使用存储引擎不是 InnoDB,则必须手动创建该表并使用“不执行任何操作”模式迁移到该表。

  • 不能使用 Aurora MySQL 只读副本作为 AWS DMS 的源。

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

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

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

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

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

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

下表列出了将 Amazon RDS MySQL 作为 AWS DMS 源时的可用额外连接属性。

名称 描述
eventsPollInterval

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

默认值:5

有效值:1–60

示例:eventsPollInterval=5;

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

initstmt=SET time_zone

指定源 MySQL 数据库的时区。时间戳被转换到指定时区。

默认值:UTC

有效值:要使用的时区的任意三个字符的缩写形式,例如 UTC、EST 或 GMT。有效值为承载源 MySQL 数据库的操作系统的标准时区缩写形式。

示例:initstmt=SET time_zone=UTC;

afterConnectScript

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

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

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

CleanSrcMetadataOnMismatch

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

默认值:false

示例:CleanSrcMetadataOnMismatch=false;

MySQL 的源数据类型

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

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

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

MySQL 数据类型

AWS 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 (65535)

LONGTEXT

NCLOB

MEDIUMTEXT

NCLOB

TINYTEXT

WSTRING (255)

GEOMETRY

BLOB

POINT

BLOB

LINESTRING

BLOB

POLYGON

BLOB

MULTIPOINT

BLOB

MULTILINESTRING

BLOB

MULTIPOLYGON

BLOB

GEOMETRYCOLLECTION

BLOB

注意

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

以下 MySQL 数据类型仅在完整加载中受支持。

MySQL 数据类型

AWS DMS 数据类型

ENUM

STRING

SET

STRING