本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用与 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 COLUMNcolumn_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 的更多信息,请参阅《Amazon Aurora 用户指南》中的使用 Aurora Serverless v2。
Amazon DMS 不支持使用 Aurora 或 Amazon 的读取器终端节点RDS,除非实例处于可写模式,即
read_only
和innodb_read_only
参数设置为0
或OFF
。有关使用亚马逊RDS和 Aurora 作为目标的更多信息,请参阅以下内容:
使用与 My SQL 兼容的数据库作为目标时的终端节点设置 Amazon DMS
您可以使用端点设置来配置与 My SQL 兼容的目标数据库,就像使用额外的连接属性一样。您可以在使用 Amazon DMS 控制台创建目标端点时指定设置,也可以使用中的create-endpoint
Amazon CLI命令和--my-sql-settings '{"
JSON语法。EndpointSetting"
:
"value"
, ...
}'
下表显示了可以将 “我的” SQL 作为目标使用的终端节点设置。
名称 | 描述 |
---|---|
|
指定将目标上的源表迁移到的位置 (单个数据库或多个数据库)。如果指定 默认值: 有效值:{ 示例: |
|
提高了将数据加载到 “我的SQL兼容” 目标数据库时的性能。指定要使用多少线程将数据加载到 My SQL 兼容的目标数据库中。设置大量线程可能会对数据库性能产生不利影响,因为每个线程均需要一个单独的连接。 默认值:1 有效值:1-5 示例: |
|
指定脚本在 Amazon DMS 连接到终端节点后立即运行。 例如,您可以指定 “我的SQL兼容” 目标应将收到的语句转换为 latin1 字符集,这是数据库的默认编译字符集。从UTF8客户端转换时,此参数通常可以提高性能。 示例: |
|
指定用于将数据传输到 “我的SQL兼容” 数据库的任何.csv 文件的最大大小(以 KB 为单位)。 默认值:32768 KB(32 MB) 有效值:1–1048576
|
您还可以使用额外的连接属性来配置SQL与 My 兼容的目标数据库。
下表显示了可以将 My SQL 作为目标使用的额外连接属性。
名称 | 描述 |
---|---|
|
禁用外键检查。 示例: |
|
为目标 “我的SQL兼容” 数据库指定时区。 默认值:UTC 有效值:目标 “我的SQL数据库” 中可用的时区名称。 示例: |
或者,您可以使用 --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支持)。 |