使用 AWS Database Migration Service 将 Oracle 数据库迁移到 MySQL

举报
小云悠悠zZ 发表于 2023/01/31 16:29:19 2023/01/31
【摘要】 同类迁移 - 迁移到相同的数据库引擎类型,但在不同的平台上。同构迁移可用于备份数据库。 异构迁移 — 迁移到其他数据库引擎,例如,Oracle 数据库迁移到 MySQL 数据库。可能需要异构迁移才能利用来自其他数据库的功能,例如源数据库不支持的数据库数据类型。商业数据库可以迁移到开源数据库,反之亦然。关系数据库可以通过迁移到NoSQL数据库而受益。

关键要点

  • 可以将 Oracle 数据库迁移到 MySQL 数据库,以利用不同的数据类型支持、操作系统支持和部署规模。
  • AWS 数据库迁移服务 (DMS) 是一种用于迁移数据库的云服务。数据库可以从本地迁移到 AWS 云,从不同的云平台迁移到 AWS,或者在 AWS 数据库服务(包括 RDS 和 Redshift)中迁移。
  • DMS 上的迁移包括模式、表和数据迁移,但不包括数据库实例本身。
  • 同类迁移涉及迁移到相同的数据库引擎类型,但迁移到不同的平台。
  • 异构迁移涉及迁移到不同的数据库引擎。

AWS Database Migration Service (DMS) 是一项在 AWS 上迁移数据库的服务。目标数据库必须是 AWS 上受支持的数据库之一,例如 AWS 关系数据库服务 (RDS) 托管数据库之一、Amazon DynamoDB 或 Amazon Redshift。源数据库可以是 AWS 上的数据库、本地数据库或其他云平台(如 Oracle 数据库云服务)上的数据库。源数据库在迁移过程中不会造成任何停机时间。

为什么要迁移数据库?

出于以下一个或多个原因,您可能需要迁移数据库:

  • 同类迁移 - 迁移到相同的数据库引擎类型,但在不同的平台上。同构迁移可用于备份数据库。
  • 异构迁移 — 迁移到其他数据库引擎,例如,Oracle 数据库迁移到 MySQL 数据库。可能需要异构迁移才能利用来自其他数据库的功能,例如源数据库不支持的数据库数据类型。商业数据库可以迁移到开源数据库,反之亦然。关系数据库可以通过迁移到NoSQL数据库而受益。
  • 数据复制 — 将数据连续复制到不同的目标数据库,以便进行测试和开发,以及数据库的区域分布。
  • 数据库合并 - 可以将多个源数据库迁移到单个数据库进行合并。
  • 平台迁移 - 本地计算机上的数据可以迁移到云数据库服务。基于云的数据库即服务 (DBaaS) 的优势包括不需要 DBA 的完全托管服务、具有故障转移功能的高可用性、可扩展性以及与其他云服务的集成以进行自动监控和自动日志记录。

步骤 1:在 RDS 上创建 Oracle 和 MySQL 数据库实例

由于我们将分别使用 Oracle 和 MySQL RDS 数据库实例作为 DMS 迁移的源和目标,因此请创建两个 RDS 实例,一个用于 Oracle 数据库,另一个用于 MySQL。在创建 RDS 实例之前,请创建新的 VPC(虚拟私有云),创建新的数据库子网组,并选择性地创建新的安全组。可以使用默认的 VPC 安全组。如果 AWS 账户对 VPC 的最大数量有限制,请在创建 RDS 实例之前删除一些未使用的 VPC。创建 RDS 实例时,请将公有访问选项设置为是,因为我们需要直接访问这些实例以在执行 DMS 迁移之前运行一些准备命令,并在迁移完成后验证迁移的数据。由于 RDS 默认不创建数据库,因此我们需要选择其他配置并为每个 RDS 实例指定初始数据库名称。对于 MySQL RDS 实例数据库名称,使用 mysqldb,对于 Oracle RDS 实例数据库名称,使用 orcl。MySQL RDS 实例的某些保留字(如“mysql”)不能用于任何配置设置(数据库名称、数据库实例标识符、主用户名、主密码)。Oracle 和 MySQL 的源和目标 RDS 实例如图 1 所示。

 


图1.RDS 数据库实例

如果使用的安全组没有所需的入站/出站规则,则可能需要对其进行修改。在 RDS 控制台中单击每个数据库实例的安全组链接。验证使用的安全组是否具有“类型所有流量”、“协议为全部”、“端口范围为全部”和“源任意位置 (0.0.0.0/0)”的设置。如果没有,这些设置单击“编辑入站规则”按钮并修改设置,然后单击“保存规则”。同样,出站规则应允许所有流量。记下为每个数据库实例配置的主用户名主密码

步骤 2:为 DMS 准备 Oracle 和 MySQL 数据库

为了能够将 RDS 上的 Oracle DB 用作 DMS 源,我们需要在数据库实例上配置一些设置。在命令行外壳中连接到 Oracle 实例以配置设置。要在命令行外壳中连接到 RDS 数据库实例,我们需要获取 RDS 实例的终端节点。RDS 上的数据库实例的终端节点可以从 RDS 控制台获取。

安装 Oracle Instant Client。使用以下 sqlplus 命令连接到 Oracle 数据库实例,其中不同用户的主机、SID 和端口可能不同;HOST 值是通过从终结点中删除端口后缀来获取的。

sqlplus admin@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=orcl.crbmlbxmp8qi.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))

SQL*Plus 命令行界面连接到 RDS 上的 Oracle DB。为 DMS 启用数据库级别的补充日志记录。

exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');

PL/SQL 过程成功完成。

还可以使用以下命令在数据库级别启用主键日志记录:

exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','PRIMARY KEY');

由于源数据库是 Oracle,因此复制正在进行的更改需要打开补充日志记录。确保归档日志在服务器上保留足够的时间(通常 24 小时就足够了。要在 RDS 数据库上设置归档日志保留期,可以使用以下命令:

exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);

迁移数据库时,也会迁移表和表数据。创建专门用于数据库迁移的新架构。向新用户授予和权限。CREATE SESSIONCREATE TABLE

CREATE USER dms_user IDENTIFIED BY dms_user_pw
DEFAULT TABLESPACE users
QUOTA unlimited ON users;

GRANT CREATE SESSION, CREATE TABLE TO dms_user;

创建在 Oracle 数据库中调用的数据库表。wlslog

CREATE TABLE dms_user.wlslog(time_stamp VARCHAR2(255) PRIMARY KEY,category VARCHAR2(255),type VARCHAR2(255),servername VARCHAR2(255), code VARCHAR2(255),msg VARCHAR2(255));
INSERT INTO dms_user.wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:16-PM-PDT','Notice','WebLogicServer','AdminServer','BEA-000365','Server state changed to STANDBY');
INSERT INTO dms_user.wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:17-PM-PDT','Notice','WebLogicServer','AdminServer','BEA-000365','Server state changed to STARTING');
INSERT INTO dms_user.wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:18-PM-PDT','Notice','WebLogicServer','AdminServer','BEA-000365','Server state changed to ADMIN');
INSERT INTO dms_user.wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:19-PM-PDT','Notice','WebLogicServer','AdminServer','BEA-000365','Server state changed to RESUMING');
INSERT INTO dms_user.wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:20-PM-PDT','Notice','WebLogicServer','AdminServer','BEA-000361','Started WebLogic AdminServer');
INSERT INTO dms_user.wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:21-PM-PDT','Notice','WebLogicServer','AdminServer','BEA-000365','Server state changed to RUNNING');
INSERT INTO dms_user.wlslog(time_stamp,category,type,servername,code,msg) VALUES('Apr-8-2014-7:06:22-PM-PDT','Notice','WebLogicServer','AdminServer','BEA-000360','Server started in RUNNING mode');

要为没有主键日志记录的表添加补充日志记录,或者如果未在数据库级别设置主键日志记录,请更改表以添加补充日志记录。

alter table dms_user.wlslog add supplemental log data (ALL) columns;

也可以在 CREATE TABLE 语句本身中启用补充日志记录

CREATE TABLE dms_user.wlslog(time_stamp VARCHAR2(255) PRIMARY KEY,category VARCHAR2(255),type VARCHAR2(255),servername VARCHAR2(255), code VARCHAR2(255),msg VARCHAR2(255),supplemental log data(ALL) columns);

步骤 3:创建复制实例

在本节中,我们将创建一个复制实例,以将 RDS 上的 Oracle 数据库实例迁移到 RDS 上的 MySQL 数据库实例。在 AWS 控制台中选择 DMS 服务。单击“创建复制实例”,如图 2 所示。

图2.创建复制实例

创建复制实例向导将启动。在名称字段中指定复制实例名称 (ora-mysql-repl)。选择一个实例类;dms.t3.medium 使用。在引擎版本下拉列表中选择 AWS DMS 版本(已使用 3.4.7)。选择分配的存储;使用了 50 GiB。选择应在其中运行复制实例的 Amazon 虚拟私有云 (VPC)。选择多可用区下拉菜单作为单可用区以使用单个可用区。选择“可公开访问”选项。

在“高级安全和网络配置”中,选择“复制”子网组。将可用性区域保留为默认值“无首选项”。选择 VPC 安全组作为默认值。选择 KMS 密钥作为默认密钥 (aws/dms)。单击创建。将创建一个复制实例,如图 3 所示。

图3.复制实例

步骤 4:创建终端节点

接下来,配置终端节点,即源数据库终端节点和目标数据库终端节点。选择边距中的“终结点”。单击“创建终结点”。源终端节点和目标终端节点是单独创建的。在 DMS -> 终结点 -> 创建终结点向导中,选择“终结点类型”作为“源终结点”。单击选择 RDS 数据库实例复选框。从下拉列表中选择 orcl RDS 实例作为之前创建的 orcl 实例。在“终结点配置”标头中,指定“终结点标识符”;兽人。应选择源引擎作为 Oracle,因为选择了 Oracle 数据库 RDS 引擎。在“访问终结点数据库”中,选择“手动提供访问信息”选项。服务器名称和端口应自动添加。指定管理员用户的密码;用户名必须大写,因为 Oracle 数据库区分大小写。将安全套接字层 (SSL) 模式保留为SID/服务名称应自动填充在 Oracle RDS 实例中配置的值 (ORCL)。在“测试终结点连接(可选)”标头中,单击“运行测试”。复制实例 ora-mysql-repl 用于端点连接。“成功状态”表示已建立连接。单击“创建终结点”。将创建源数据库的终结点,如图 4 所示。

图4.源终端节点

要创建目标终端节点,请再次单击创建终端节点。将再次启动创建终结点向导。这一次,选择“终结点类型”作为“目标终结点”。单击选择 RDS 数据库实例复选框,然后选择 mysqldb 实例。在终结点配置标头中,应自动添加终结点标识符目标引擎设置为 MySQL。对于“访问终结点数据库”,请选择“手动提供访问信息”。服务器名称和端口应从 MySQL RDS 实例自动添加。指定管理员用户的密码。用户名必须以小写形式指定,因为MySQL使用小写。将安全套接字层 (SSL) 模式保留为无。在“测试终结点连接(可选)”标头中,单击“运行测试”。复制实例 ora-mysql-repl 用于端点连接。“成功状态”表示已建立连接。单击“创建终结点”。将创建一个目标端点,如图 5 所示。

图5.目标终端节点

步骤 5:创建任务

接下来,我们需要创建一个迁移任务,但在此之前,我们需要创建一个复制实例,如前所述。选择边距中的数据库迁移任务。在 DMS -> 数据库迁移任务表中,单击创建任务。在“创建数据库迁移任务”向导中,在“任务”配置标头中指定任务标识符(orcl-to-mysql)。在“复制实例”下拉列表中,选择之前创建的复制实例。在源数据库终端节点中,选择为 Oracle 数据库 RDS 实例创建的 orcl 终端节点。对于目标数据库终端节点,请选择之前创建的 mysqldb 终端节点。对于“迁移类型”,请选择“迁移现有数据并复制正在进行的更改”。

在任务中,必须至少配置一个选择规则,否则不会创建任务并生成错误消息。在“表映射”标题中,单击“选择规则”下拉列表。单击添加新选择规则按钮。在选择规则详细信息中,配置“位置”选择规则。在“架构”下拉列表中选择输入架构”。将源名称指定为 DMS_USER将源表名称指定为 WLSLOG。架构/表/视图/列名称必须大写,因为 Oracle 数据库区分大小写。% 字符是架构/表名称的通配符,表示所有架构/表。在“操作”字段中,可以通过选择“包括”或“排除”来包含或排除对象。排除项在包含后处理。选择“操作”作为“包括”。源筛选器限制可能添加的从源传输到目标的记录的数量和类型。选择规则配置如图 6 所示。

图6.选择规则

可以使用转换规则更改或转换部分或全部选定对象的架构、表或列名称。单击“添加转换规则”按钮以添加一个。例如,转换表名。在“规则目标”下拉列表中,选择“”。在“源名称”中,选择“输入架构”。将架构名称指定为 DMS_USER。将源表名称指定为 WLSLOG。在“操作”下拉列表中,从其中一个可用操作中进行选择,例如添加/删除/替换前缀/后缀等。选择操作作为小写,因为MySQL以小写形式存储架构/表名称。表名的转换规则如图 7 所示。

图7.使表名小写的转换规则

同样,添加另一个转换规则以使架构名称小写,如图 8 所示。

图8.使架构名称小写的转换规则

在“任务设置”->“高级任务设置”-“控制表设置”>中,将“使用架构在目标中创建控制表”设置为“mysqldb”。可以选择通过选中“启用迁移前评估运行”复选框来执行迁移前评估。在“迁移任务启动配置”中,选择“稍后手动”。另一个选项是“创建时自动”,仅当未启用迁移前评估时可用。随后,单击创建任务

将添加新任务。最初,任务状态为“正在创建”。创建任务后,状态变为 Ready,如图 9 所示。

图9.任务状态为就绪

步骤 6:运行任务

要运行迁移任务,请在带有复选框的表中选择任务,然后单击操作下拉列表中的重新启动/恢复“状态”应变为“正在启动”。启动后,状态变为“正在运行”,迁移完成后,状态变为“加载完成”,如图 10 所示。“表统计信息”选项卡应列出已迁移的表。

图 10.加载完成

步骤 7:查询迁移的数据库架构

使用 MySQL 客户端界面列出迁移的数据库和表。首先,连接到 MySQL RDS 实例。要连接到 MySQL 数据库,请从其配置详细信息中获取端点。使用 MySQL 客户端,从命令行连接到 MySQL。出现提示时提供密码:

mysql -h mysqldb.crbmlbxmp8qi.us-east-1.rds.amazonaws.com -P 3306 -u admin  –p

使用命令列出架构。将列出dms_user架构。SHOW SCHEMAS

~$ mysql -h mysqldb.crbmlbxmp8qi.us-east-1.rds.amazonaws.com -P 3306 -u admin -p 
Enter password: 
MySQL [(none)]> SHOW SCHEMAS;
+--------------------+
| Database           |
+--------------------+
| dms_user           |
| information_schema |
| mysql              |
| mysqldb            |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.078 sec)

使用命令选择数据库。使用命令列出表。之前在 Oracle 数据库中创建的表已迁移并列出。dms_useruse dms_usershow tableswlslog

MySQL [(none)]> use dms_user;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [dms_user]> SHOW TABLES;
+--------------------+
| Tables_in_dms_user |
+--------------------+
| wlslog             |
+--------------------+
1 row in set (0.078 sec)

迁移的表包含查询结果所示的数据。wlslog

MySQL [dms_user]> SELECT * FROM wlslog;
+---------------------------+----------+----------------+-------------+------------+----------------------------------+
| TIME_STAMP                | CATEGORY | TYPE           | SERVERNAME  | CODE       | MSG                              |
+---------------------------+----------+----------------+-------------+------------+----------------------------------+
| Apr-8-2014-7:06:16-PM-PDT | Notice   | WebLogicServer | AdminServer | BEA-000365 | Server state changed to STANDBY  |
| Apr-8-2014-7:06:17-PM-PDT | Notice   | WebLogicServer | AdminServer | BEA-000365 | Server state changed to STARTING |
| Apr-8-2014-7:06:18-PM-PDT | Notice   | WebLogicServer | AdminServer | BEA-000365 | Server state changed to ADMIN    |
| Apr-8-2014-7:06:19-PM-PDT | Notice   | WebLogicServer | AdminServer | BEA-000365 | Server state changed to RESUMING |
| Apr-8-2014-7:06:20-PM-PDT | Notice   | WebLogicServer | AdminServer | BEA-000361 | Started WebLogic AdminServer     |
| Apr-8-2014-7:06:21-PM-PDT | Notice   | WebLogicServer | AdminServer | BEA-000365 | Server state changed to RUNNING  |
| Apr-8-2014-7:06:22-PM-PDT | Notice   | WebLogicServer | AdminServer | BEA-000360 | Server started in RUNNING mode   |
+---------------------------+----------+----------------+-------------+------------+----------------------------------+
7 rows in set (0.078 sec)

MySQL [dms_user]> 

默认情况下,迁移不会主动轮询源数据库以迁移任何更改。如果对源数据库进行了任何修改,例如数据添加到表中或创建新表,则需要重新运行迁移任务。可能需要修改迁移任务,例如添加/删除选择规则或修改其他任务设置之一。任务在未运行时可能会被修改。单击“修改”以修改任务。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。