本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 MySQL-compatible 数据库作为目标 AWS Database Migration Service
您可以使用任何 AWS DMS 支持的源数据引擎将数据迁移到任何 MySQL-compatible 数据库。 AWS DMS如果您要迁移到本地 MySQL-compatible 数据库,则 AWS DMS 要求您的源引擎位于 AWS 生态系统中。引擎可以安装在 AWS托管服务上,例如亚马逊 RDS、Amazon Aurora 或 Amazon S3。或者,该引擎也可以位于 Amazon EC2 上的自管理数据库中。
您可以使用 SSL 对 MySQL-compatible 终端节点和复制实例之间的连接进行加密。有关在 MySQL-compatible终端节点上使用 SSL 的更多信息,请参阅将 SSL 与 AWS Database Migration Service。
有关 AWS DMS 支持作为目标的 MySQL 版本的信息,请参阅的目标 AWS DMS。
您可以使用以下 MySQL-compatible 数据库作为目标 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
-
Amazon Aurora MySQL
注意
无论使用哪种源存储引擎(Myisam、MEMORY 等) AWS DMS ,默认情况下都将目标表 MySQL-compatible 创建为 InnoDB 表。
如果您需要在InnoDB以外的存储引擎中创建表,则可以在 MySQL-compatible 目标系统上手动创建表,然后使用不执行任何操作选项迁移该表。有关更多信息,请参阅 Full-load 任务设置。
有关使用 MySQL-compatible 数据库作为目标的更多详细信息 AWS DMS,请参阅以下各节。
主题
使用任何 MySQL-compatible 数据库作为目标 AWS Database Migration Service
在开始使用 MySQL-compatible 数据库作为目标之前 AWS DMS,请确保已完成以下先决条件:
-
为其提供 AWS DMS 具有 MySQL-compatible 数据库 read/write 权限的用户帐户。要创建所需的权限,请运行以下命令。
CREATE USER '<user acct>'@'%' IDENTIFIED BY '<user password>'; GRANT ALTER, CREATE, DROP, INDEX, INSERT, UPDATE, DELETE, SELECT, CREATE TEMPORARY TABLES ON <schema>.* TO '<user acct>'@'%'; GRANT ALL PRIVILEGES ON awsdms_control.* TO '<user acct>'@'%'; -
在完全加载迁移阶段,您必须禁用目标表上的外键。要在 MySQL-compatible 数据库满负荷期间禁用外键检查,可以在 AWS DMS 控制台的目标终端节点的 “额外连接属性” 部分中添加以下命令。
Initstmt=SET FOREIGN_KEY_CHECKS=0; -
设置数据库参数
local_infile = 1以启用 AWS DMS ,以便将数据加载到目标数据库。 -
如果您使用 MySQL-specific 预迁移评估,请授予以下权限。
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
Aurora MySQL 8.4 目标的注意事项
Aurora MySQL 8.4 引入了可能会影响 AWS DMS 目标终端节点连接的安全更改。在将 Aurora MySQL 目标升级到版本 8.4 之前,请查看以下内容。
TLS 强制执行
Aurora MySQL 8.4 ON 默认设置require_secure_transport为,这意味着所有连接都必须使用 TLS。如果您的 AWS DMS 目标终端节点连接到 Aurora MySQL 8.4,并且 SSL 模式设置为无,则连接将被拒绝。如果您的终端节点 SSL 模式设置为无,您将收到以下错误:MySQL Error 3159 (HY000): Connections using insecure transport are
prohibited while --require_secure_transport=ON。将端点 SSL 模式设置为 verify-ca 或 verify-ful l。两种模式都需要 CA 证书。或者,OFF在 Aurora 集群参数组中设置require_secure_transport为,以允许未加密的连接。
注意
Aurora MySQL 8.4 仅支持 TLS 1.2 的 GCM 密码套件。所有 CBC-mode 密码均已删除。 AWS DMS 对 MySQL 和 Aurora MySQL 终端节点使用 TLS 1.2,并将自动协商支持的 GCM 密码。如果您有自定义密码配置,请确认它们包含以下支持的密码之一: ECDHE-RSA-AES128-GCM-SHA256、、 ECDHE-RSA-AES256-GCM-SHA384或。 ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-GCM-SHA384
注意
AWS DMS 不支持 MySQL 终端节点的 TLS 1.3。这不会影响与 Aurora MySQL 8.4 的连接,因为 Aurora MySQL 8.4 继续支持 TLS 1.2。
身份验证(适用于 MySQL 的 Aurora MySQL 和 RDS 8.4)
Aurora MySQL 8.4 将default_authentication_plugin参数替换为authentication_policy,默认为*:caching_sha2_password。升级后,现有数据库用户会保留其当前的身份验证插件。如果您在升级后创建新的 AWS DMS
终端节点用户,则除非您在集群参数组*:mysql_native_password中authentication_policy将其设置为,否则他们将caching_sha2_password默认使用。
主用户密码重置
升级到 Aurora MySQL 8.4 后,通过 AWS 管理控制台、CLI 或 Secrets Manager 轮换重置主用户密码会将主用户的身份验证插件设置为authentication_policy参数定义的默认值。如果设置authentication_policy为其默认值 (*:caching_sha2_password),则在下次重置密码caching_sha2_password时,主用户的身份验证插件mysql_native_password将从变为。
如果您的 AWS DMS 目标端点使用主用户帐户,请在重置密码后验证连接。要避免更改身份验证插件,请执行以下任一操作:
*:mysql_native_password在重置密码之前,在集群参数组中设置为,或者authentication_policy使用明确指定的身份验证插件创建专用 AWS DMS 端点用户(推荐)。例如:
CREATE USER 'dms_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
有关 Aurora MySQL 8.4 安全变更的更多信息,请参阅亚马逊 Aurora MySQL 的安全性以及亚马逊 Aurora 和 Secrets Manager 的密码管理。有关身份验证插件已知问题的信息,请参阅 Amazon RDS 用户指南中的身份验证插件。
使用 MySQL-compatible 数据库作为目标的限制 AWS Database Migration Service
使用 MySQL 数据库作为目标时, AWS DMS 不支持以下内容:
-
数据定义语言 (DDL) 语句 TRUNCATE PARTITION、DROP TABLE 和 RENAME TABLE。
-
使用
ALTER TABLE语句将列添加到表的开头或中间。table_nameADD COLUMNcolumn_name -
在满负荷任务中向 MySQL-compatible 目标加载数据时, AWS DMS 不会报告任务日志中的限制导致的错误,这些错误可能会导致重复的键错误或与记录数量不匹配。这是由 MySQL 使用
LOAD DATA命令处理本地数据的方式造成的。务必在完全加载阶段执行以下操作:禁用限制
使用 AWS DMS 验证来确保数据的一致性。
-
当您将列的值更新为其现有值时, MySQL-compatible数据库会返回
0 rows affected警告。尽管此行为在技术上没有错误,但它与其他数据库引擎应对这种情况的方式不同。例如,Oracle 执行一个行的更新。对于 MySQL-compatible 数据库,在 awsdms_apply_exceptions 控制表中 AWS DMS 生成一个条目并记录以下警告。Some changes from the source database had no impact when applied to the target database. See awsdms_apply_exceptions table for details. Aurora Serverless 可用作 Amazon Aurora 版本 2 的目标,且与 MySQL 版本 5.7 兼容。(选择 Aurora MySQL 版本 2.07.1 以便能够使用 Aurora Serverless,且与 MySQL 5.7 兼容。) 有关 Aurora Serverless 的更多信息,请参阅《Amazon Aurora 用户指南》中的使用 Aurora Serverless v2。
AWS DMS 不支持使用适用于 Aurora 或 Amazon RDS 的读取器终端节点,除非实例处于可写模式,即
read_only和innodb_read_only参数设置为0或OFF。有关使用 Amazon RDS 和 Aurora 作为目标的更多信息,请参见以下内容:-
复制 TIME 数据类型时,不会复制时间值的小数部分。
-
使用额外连接属性
loadUsingCSV=false复制 TIME 数据类型时,时间值上限为范围[00:00:00, 23:59:59]。
使用 MySQL-compatible 数据库作为目标时的终端节点设置 AWS DMS
您可以使用端点设置来配置 MySQL-compatible 目标数据库,就像使用额外的连接属性一样。您可以在使用 AWS DMS 控制台创建目标端点时指定设置,或者使用中的create-endpoint命令和 --my-sql-settings '{" JSON 语法。AWS CLIEndpointSetting":
"value", ...}'
下表显示了您可以配合使用 MySQL 作为目标的端点设置。
| Name | 说明 |
|---|---|
|
|
使用此额外连接属性(ECA)设置 MySQL 实例的端点连接超时时间(以秒为单位)。默认值为 10 秒。ECA 示例: |
|
|
指定将目标上的源表迁移到的位置 (单个数据库或多个数据库)。如果指定 默认值: 有效值:{ 示例: |
|
提高了将数据加载到 MySQL-compatible 目标数据库时的性能。指定用于将数据加载到 MySQL-compatible 目标数据库的线程数。设置大量线程可能会对数据库性能产生不利影响,因为每个线程均需要一个单独的连接。 默认值:1 有效值:1-5 示例: |
|
指定脚本在 AWS DMS 连接到终端节点后立即运行。 例如,您可以指定 MySQL-compatible 目标应将收到的语句转换为 latin1 字符集,这是数据库的默认编译字符集。此参数通常可在从 UTF8 客户端转换时提高性能。 示例: |
|
指定用于向 MySQL-compatible 数据库传输数据的任何.csv 文件的最大大小(以 KB 为单位)。 默认值:32768 KB(32 MB) 有效值:1–1048576
|
您也可以使用额外的连接属性来配置 MySQL-compatible 目标数据库。
下表显示了将 MySQL 作为目标时可以使用的额外连接属性。
| Name | 说明 |
|---|---|
|
禁用外键检查。 示例: |
|
指定目标 MySQL-compatible 数据库的时区。 默认值:UTC 有效值:目标 MySQL 数据库中可用的时区名称。 示例: |
或者,您可以使用 --my-sql-settings 命令的 AfterConnectScript 参数来禁用外键检查并为数据库指定时区。
MySQL 的目标数据类型
下表显示了使用时支持的 MySQL 数据库目标数据类型 AWS DMS 以及 AWS DMS 数据类型的默认映射。
有关 AWS DMS 数据类型的更多信息,请参见AWS Database Migration Service 的数据类型。
|
AWS DMS 数据类型 |
MySQL 数据类型 |
|---|---|
|
BOOLEAN |
BOOLEAN |
|
BYTES |
如果长度介于 1 和 65535 之间,请使用 VARBINARY (length)。 如果长度介于 65536 和 2147483647 之间,请使用 LONGLOB。 |
|
DATE |
DATE |
|
TIME |
TIME |
|
TIMESTAMP |
“如果小数位数 => 0 且 <= 6,请使用 DATETIME (Scale) 如果小数位数 => 7 且 <= 9,请使用 VARCHAR (37)” |
|
INT1 |
TINYINT |
|
INT2 |
SMALLINT |
|
INT4 |
INTEGER |
|
INT8 |
BIGINT |
|
NUMERIC |
DECIMAL (p,s) |
|
REAL4 |
FLOAT |
|
REAL8 |
DOUBLE PRECISION |
|
string |
如果长度介于 1 和 21845 之间,请使用 VARCHAR (length)。 如果长度介于 21846 和 2147483647 之间,请使用 LONGTEXT。 |
|
UINT1 |
UNSIGNED TINYINT |
|
UINT2 |
UNSIGNED SMALLINT |
|
UINT4 |
UNSIGNED INTEGER |
|
UINT8 |
UNSIGNED BIGINT |
|
WSTRING |
如果长度介于 1 和 32767 之间,请使用 VARCHAR (length)。 如果长度介于 32768 和 2147483647 之间,请使用 LONGTEXT。 |
|
BLOB |
如果长度介于 1 和 65535 之间,请使用 BLOB。 如果长度介于 65536 和 2147483647 之间,请使用 LONGBLOB。 如果长度为 0,请使用 LONGBLOB (完全 LOB 支持)。 |
|
NCLOB |
如果长度介于 1 和 65535 之间,请使用 TEXT。 如果长度介于 65536 和 2147483647 之间,请将 LONGTEXT 与 ucs2 一起用于 CHARACTER SET。 如果长度为 0,请将 LONGTEXT (完全 LOB 支持) 与 ucs2 一起用于 CHARACTER SET。 |
|
CLOB |
如果长度介于 1 和 65535 之间,请使用 TEXT。 如果长度介于 65,536 和 2147483647 之间,请使用 LONGTEXT。 如果长度为 0,请使用 LONGTEXT (完全 LOB 支持)。 |