【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

AWS 提供了RDS这样传统的关系型数据库,也提供了Dynamodb这样的NoSQL 数据库。那么问题来了,如何把现有的数据库迁移到AWS上呢?

当然,数据库本身就提供了备份和还原的功能,我们完全可以手动拷贝备份到对应的服务器上然后进行还原的操作。这种操作对于相同平台的数据库来说还是比较方便的,但是如果涉及到不同的数据库平台,那就比较麻烦了。

AWS本身就提供了一个数据库迁移的服务,叫做 Database Migration Service ( DMS)。 通过这个服务,我们可以实现同类型迁移 (Homogenous migration),例如 Oracle 到 Oracle,或者混杂迁移(Heterogeneous migration) ,比如 Oracle 到 MS SQL。对于混杂迁移来说,我们需要使用 Schema Converter Tool (SCT)对 Schema进行 转换才能迁移。

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

下面看一个简单的demo,如何把一个现有的Microsoft SQL 数据库转换到AWS的 Aurora 数据库。

豆子打算创建一个RDS的 MSSQL 数据库,一个 RDS的 Aurora 数据库。在MSSQL上我会创建一些样本数据,然后通过 SCT 进行 Schema 转换,最后通过 DMS 进行数据库的同步进行迁移。值得一提的是,DMS支持从 RDS到RDS, EC2 到 RDS 甚至 本地数据库 到 RDS 的各种转换。

下面看看具体操作。在操作过程中,豆子因为实验环境的缘故,遇见了一些坑,会尽量列出来,避免再次发生。

首先创建 RDS数据库

进入 AWS RDS 控制界面

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

新建一个 MSSQL 数据库,注意我选择的类型是 SQL Server Standard Edition。很不幸的是,DMS不支持 Express版本的迁移。

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

输入数据库Instance的名字和密码

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

测试的服务器不需要太好,最便宜的就行

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

选择VPC (这里有个坑稍后我会提到)

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

重点,注意看他的价格,一个月要768 美元!!

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

这个是通过下面的价格算出来的。新手做这个实验大概要2个小时,两台服务器大概开支会在5刀左右,所以做完了实验一定要记得删除自己的数据库!!

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

数据库创建中

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

我顺便创建了一个安全组,允许我自己的机器访问1433和3306端口 。(目前为止没问题,但是这是第二个坑,后面会有问题)

重复上面的操作步骤,我又创建了一个 Aurara的数据库,他会自动创建一个cluster,然后把你新建的成员放在里面(即使只有一个)

最后我的两个RDS的Instance就创建好了。demo1 是 MSSQL,做为我的数据库源,demo2是Aurora,作为数据库目标

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

创建好了数据库以后,我还需要生成一些测试用的table和数据。 下面看看如何从本机连接数据库。

首先看看 MSSQL的 Endpoint
【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

在我的本地电脑上通过MSSQL Management 工具连接。理论上,这一步应该很简单,如果我的安全组策略正确的话。这里我遇见了第一个坑。我的账号里面有多个VPC的网络,而我的本地网络和AWS 某一个VPC之间已经存在了 S2S V-P-N 的连接,因而AWS会认为我的计算机属于内网,他很智能地把他的域名解析为内部IP。事实上,我的计算机和这个测试的VPC的网络之间并没有路由,也没有配置Gateway,内网访问是不通的,尽管他有一个公网IP,但是AWS自动给我解析为内网IP之后,我的路由会找不到对应的路径导致我始终无法访问。最后我只能重建RDS,然后确保他在的VPC和我的计算机网络之间存在了S2S连接关系。

连接之后,执行我的测试SQL脚本,他会创建一堆表,并插入一些测试数据

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

下载安装 Schema Conversion Tool

下一步我们需要在我的电脑上安装 SCT 工具。
在下面的连接上下载SCI,MSSQL 的 JDBC 以及 MySQL的 JDBC

https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html

然后打开SCT,选择新建一个项目

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

分别连接 MSSQL 和 Aurora
【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

连接成功
【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

勾选我们要迁移的数据库,之后在Action 选择 Create Report

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

他会扫描你的 MSSQL 数据库进行评估是否可以转换。

下面是生成的报告

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

如果报告没有问题,下一步就是进行Schema的转换了, 选择 Action- Convert Schema

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

几秒之后 可以看见Schema已经在Aurora这边生成了

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

配置DMS

最后一大块的操作是配置DMS。 登录AWS 控制台 , 选择 Database Migration Service。这个服务里面,我需要创建三个东西:

  1. 一个用来同步的Instance,类似EC2实例,但是它是由AWS来管理的
  2. 创建Source Endpoint和 Destination Endpoint
  3. 创建一个任务来同步。

首先来创建一个 replication instance ( 同步实例)

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

注意他所选择的VPC Secuirty Group 是我之前创建的,这里其实是有问题的
【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

创建完成之后 我们来继续创建Endpoint。

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

Endpoint 创建完之后一定要测试 Connection。
【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

创建之后的样子

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

创建好了之后来测试一下,不通!!

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

我在这里卡了至少1个小时。最后发现有3个坑在这里。

首先,我之前配置这个SG的时候,只允许了我本地的机器访问,我的DMS的服务器是不行的,因此这里我们需要把这个DMS的内网IP也加进去;

第二:SG的outbound rule默认是所有都打开的,我无意中进行了限制,因此需要确认outbound rule是放行的

第三:我有一个NACL在这个公网subnet上,因此我还得在NACL上面放行

获取DMS 同步服务器的IP

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

修改安全组的出入规则

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

修改我的NACL的出入规则

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

再测试一下连接成功

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

最后,我们来创建一个任务进行同步

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

添加一个 selection rule

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

等待2 分钟之后 进度条显示成功

【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

测试

MSSQL Management 工具 连接我的源数据库, 进入查询一下数据
【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

MySQL workbench 连接进入我的目标数据库,查询一下 数据一致,迁移成功!
【AWS征文】AWS 迁移MSSQL 数据库到 Aurora

再次友情提醒,实验成功了记得删掉服务器,AWS的收费还是很贵的。

猜你喜欢

转载自blog.51cto.com/beanxyz/2513041