View a markdown version of this page

使用 MySQL-compatible 数据库作为目标 AWS Database Migration Service - AWS Database Migration Service

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

使用 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_passwordauthentication_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_name ADD COLUMN column_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_onlyinnodb_read_only参数设置为0OFF。有关使用 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 '{"EndpointSetting": "value", ...}' JSON 语法。AWS CLI

下表显示了您可以配合使用 MySQL 作为目标的端点设置。

Name 说明

ConnectionTimeout

使用此额外连接属性(ECA)设置 MySQL 实例的端点连接超时时间(以秒为单位)。默认值为 10 秒。ECA 示例:ConnectionTimeout=30

TargetDbType

指定将目标上的源表迁移到的位置 (单个数据库或多个数据库)。如果指定SPECIFIC_DATABASE,则需要在使用 AWS CLI 或时指定数据库名称 AWS 管理控制台。

默认值:MULTIPLE_DATABASES

有效值:{SPECIFIC_DATABASEMULTIPLE_DATABASES}

示例:--my-sql-settings '{"TargetDbType": "MULTIPLE_DATABASES"}'

ParallelLoadThreads

提高了将数据加载到 MySQL-compatible 目标数据库时的性能。指定用于将数据加载到 MySQL-compatible 目标数据库的线程数。设置大量线程可能会对数据库性能产生不利影响,因为每个线程均需要一个单独的连接。

默认值:1

有效值:1-5

示例:--my-sql-settings '{"ParallelLoadThreads": 1}'

AfterConnectScript

指定脚本在 AWS DMS 连接到终端节点后立即运行。

例如,您可以指定 MySQL-compatible 目标应将收到的语句转换为 latin1 字符集,这是数据库的默认编译字符集。此参数通常可在从 UTF8 客户端转换时提高性能。

示例:--my-sql-settings '{"AfterConnectScript": "SET character_set_connection='latin1'"}'

MaxFileSize

指定用于向 MySQL-compatible 数据库传输数据的任何.csv 文件的最大大小(以 KB 为单位)。

默认值:32768 KB(32 MB)

有效值:1–1048576

--my-sql-settings '{"MaxFileSize": 512}'

您也可以使用额外的连接属性来配置 MySQL-compatible 目标数据库。

下表显示了将 MySQL 作为目标时可以使用的额外连接属性。

Name 说明

Initstmt=SET FOREIGN_KEY_CHECKS=0;

禁用外键检查。

示例:--extra-connection-attributes "Initstmt=SET FOREIGN_KEY_CHECKS=0;"

Initstmt=SET time_zone

指定目标 MySQL-compatible 数据库的时区。

默认值:UTC

有效值:目标 MySQL 数据库中可用的时区名称。

示例:--extra-connection-attributes "Initstmt=SET time_zone=US/Pacific;"

或者,您可以使用 --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 支持)。