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

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

使用与 SQL My 兼容的数据库作为目标 Amazon Database Migration Service

您可以使用任何 Amazon DMS 支持的源数据引擎将数据迁移到任何与 My SQL 兼容的数据库。 Amazon DMS如果您要迁移到本地SQL与 My 兼容的数据库,则 Amazon DMS 需要您的源引擎位于 Amazon 生态系统中。引擎可以安装在 Amazon托管服务上,例如亚马逊RDS、Amazon Aurora 或 Amazon S3。或者引擎可以在 Amaz EC2 on 的自管理数据库上。

您可以使用加密SSL与 My SQL 兼容的终端节点和复制实例之间的连接。有关使用SSL与 My SQL 兼容的终端节点的更多信息,请参阅将 SSL 与 Amazon Database Migration Service

有关 Amazon DMS 支持作为目标的 My SQL 版本的信息,请参阅的目标 Amazon DMS

您可以使用以下SQL与 My 兼容的数据库作为目标: Amazon DMS

  • 我的SQL社区版

  • 我的SQL标准版

  • 我的SQL企业版

  • 我的SQL集群运营商级版

  • MariaDB Community Edition

  • MariaDB Enterprise Edition

  • MariaDB Column Store

  • 亚马逊 Aurora 我的 SQL

注意

无论使用哪种源存储引擎(My ISAM MEMORY、等),默认情况下都将与 My SQL 兼容的目标表 Amazon DMS 创建为 InnoDB 表。

如果您需要在除InnoDB之外的存储引擎中创建表,则可以在SQL兼容我的目标上手动创建表,然后使用不执行任何操作选项迁移该表。有关更多信息,请参阅 完全加载任务设置

有关使用与 My SQL 兼容的数据库作为目标的更多详细信息 Amazon DMS,请参阅以下各节。

使用任何SQL与 My 兼容的数据库作为目标 Amazon Database Migration Service

在开始使用与 My SQL 兼容的数据库作为目标之前 Amazon DMS,请确保已完成以下先决条件:

  • 为其提供对 “我的SQL兼容” 数据库 Amazon DMS 具有读/写权限的用户帐户。要创建所需的权限,请运行以下命令。

    CREATE USER '<user acct>'@'%' IDENTIFIED BY '<user password>'; GRANT ALTER, CREATE, DROP, INDEX, INSERT, UPDATE, DELETE, SELECT ON <schema>.* TO '<user acct>'@'%'; GRANT ALL PRIVILEGES ON awsdms_control.* TO '<user acct>'@'%';
  • 在完全加载迁移阶段,您必须禁用目标表上的外键。要在满载期间禁用 “我的SQL兼容” 数据库的外键检查,可以在目标端点的 Amazon DMS 控制台的 “额外连接属性” 部分中添加以下命令。

    Initstmt=SET FOREIGN_KEY_CHECKS=0;
  • 设置数据库参数 local_infile = 1 以启用 Amazon DMS ,以便将数据加载到目标数据库。

  • 如果您使用我的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

使用与 My SQL 兼容的数据库作为目标的限制 Amazon Database Migration Service

使用 “我的SQL数据库” 作为目标时, Amazon DMS 不支持以下内容:

  • 数据定义语言 (DDL) 语句TRUNCATEPARTITIONDROPTABLE、和RENAMETABLE。

  • 使用 ALTER TABLE table_name ADD COLUMN column_name 语句将列添加到表的开头或中间。

  • 在满载任务中将数据加载到 “我的SQL兼容” 目标时, Amazon DMS 不会报告任务日志中的限制导致的错误,这些错误可能会导致重复的键错误或与记录数量不匹配。这是由 My 使用LOAD DATA命令SQL处理本地数据的方式造成的。务必在完全加载阶段执行以下操作:

    • 禁用限制

    • 使用 Amazon DMS 验证来确保数据一致。

  • 当您将列的值更新为其现有值时,我的SQL兼容数据库会返回0 rows affected警告。尽管此行为在技术上没有错误,但它与其他数据库引擎应对这种情况的方式不同。例如,Oracle 执行一个行的更新。对于我的SQL兼容数据库,在 awsdms_apply_exceptions 控制表中 Amazon 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 可用作亚马逊 Aurora 版本 2 的目标,与我SQL的 5.7 版本兼容。(选择 Aurora 我的SQL版本 2.07.1 即可使用兼容我的 SQL 5.7 的 Aurora Serverless。) 有关 Aurora Serverless 的更多信息,请参阅亚马逊 Aurora 用户指南中的使用 Aurora Serverless v2

  • Amazon DMS 不支持使用适用于 Aurora 或 Amazon RDS 的读取器终端节点,除非实例处于可写模式,即read_onlyinnodb_read_only参数设置为0OFF。有关使用亚马逊RDS和 Aurora 作为目标的更多信息,请参阅以下内容:

使用与 My SQL 兼容的数据库作为目标时的终端节点设置 Amazon DMS

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

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

名称 描述

TargetDbType

指定将目标上的源表迁移到的位置 (单个数据库或多个数据库)。如果指定SPECIFIC_DATABASE,则需要在使用 Amazon CLI 或时指定数据库名称 Amazon Web Services Management Console。

默认值:MULTIPLE_DATABASES

有效值:{SPECIFIC_DATABASEMULTIPLE_DATABASES}

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

ParallelLoadThreads

提高了将数据加载到 “我的SQL兼容” 目标数据库时的性能。指定要使用多少线程将数据加载到 My SQL 兼容的目标数据库中。设置大量线程可能会对数据库性能产生不利影响,因为每个线程均需要一个单独的连接。

默认值:1

有效值:1-5

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

AfterConnectScript

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

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

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

MaxFileSize

指定用于将数据传输到 “我的SQL兼容” 数据库的任何.csv 文件的最大大小(以 KB 为单位)。

默认值:32768 KB(32 MB)

有效值:1–1048576

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

您还可以使用额外的连接属性来配置SQL与 My 兼容的目标数据库。

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

名称 描述

Initstmt=SET FOREIGN_KEY_CHECKS=0;

禁用外键检查。

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

Initstmt=SET time_zone

为目标 “我的SQL兼容” 数据库指定时区。

默认值:UTC

有效值:目标 “我的SQL数据库” 中可用的时区名称。

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

或者,您可以使用 --my-sql-settings 命令的 AfterConnectScript 参数来禁用外键检查并为数据库指定时区。

我的目标数据类型 SQL

下表显示了使用时支持的 “我的SQL数据库” 目标数据类型 Amazon DMS 以及 Amazon DMS 数据类型的默认映射。

有关 Amazon DMS 数据类型的更多信息,请参见Amazon Database Migration Service 的数据类型

Amazon DMS 数据类型

我的SQL数据类型

BOOLEAN

BOOLEAN

BYTES

如果长度介于 1 到 65,535 之间,则使用VARBINARY(长度)。

如果长度介于 65,536 到 2,147,483,647 之间,则使用。LONGLOB

DATE

DATE

TIME

TIME

TIMESTAMP

“如果比例为 => 0 且 =< 6,那么:DATETIME(比例)

如果比例为 => 7 且 =< 9,那么:VARCHAR(37)”

INT1

TINYINT

INT2

SMALLINT

INT4

INTEGER

INT8

BIGINT

NUMERIC

DECIMAL(p, s)

REAL4

FLOAT

REAL8

DOUBLE PRECISION

STRING

如果长度介于 1 到 21,845 之间,则使用VARCHAR(长度)。

如果长度介于 21,846 到 2,147,483,647 之间,则使用。LONGTEXT

UINT1

UNSIGNED TINYINT

UINT2

UNSIGNED SMALLINT

UINT4

UNSIGNED INTEGER

UINT8

UNSIGNED BIGINT

WSTRING

如果长度介于 1 到 32,767 之间,则使用VARCHAR(长度)。

如果长度介于 32,768 到 2,147,483,647 之间,则使用。LONGTEXT

BLOB

如果长度介于 1 到 65,535 之间,则使用。BLOB

如果长度介于 65,536 到 2,147,483,647 之间,则使用。LONGBLOB

如果长度为 0,则使用LONGBLOB(完全LOB支持)。

NCLOB

如果长度介于 1 到 65,535 之间,则使用。TEXT

如果长度介于 65,536 到 2,147,483,647 之间,则与 ucs2 一起使用 LONGTEXT CHARACTER SET

如果长度为 0,则将LONGTEXT(完全LOB支持)与 ucs2 配合使用。CHARACTER SET

CLOB

如果长度介于 1 到 65,535 之间,则使用。TEXT

如果长度介于 65,536 到 2147483647 之间,则使用。LONGTEXT

如果长度为 0,则使用LONGTEXT(完全LOB支持)。