AWS 提供了数据库迁移的服务,叫做 Database Migration Service ( DMS)。 通过这个服务,我们可以实现同样平台的迁移,例如 MySQL 到 MySQL,或者不同平台的迁移,比如 MS SQL 到 Aurora。前者可以直接迁移,后者则需要使用 Schema Converter Tool (SCX e 2 # _ ZT)对 Schema进行 转换才能迁移。当然,如果数据o : ] T H l w库本身很小,那么J R 1 !可能直接手动拷贝的效D w U w率会更高了。
下面看一个简单的demo。
豆子打算创建一个RDS的 MSSQL 数据库,一个^ S p Z G P W RDS的 Aurora 数据库。在MSSQL上我会创建一个sample的数据库,然后通过 SCj f r ~T 进行 Schema 转换,然后通过 DMS 进行数据h w S = 2 ] L库的同步迁移。
下面看看具体操作
首先创建 RDS MSSQL 数据库
新建一个 MSSQL 数据库,注意我选择的类型是 SQL{ N F Y Y s Server Standard Edition。DMS不支持 Express版本的迁移。
数据库Instance的名字和密码
测试的} z _ Q q * - t h服务器不需要太好,最便宜的就行
选择VPC (这里有个坑稍后我会提到)
重点,注意看他的价格,一个月要768 美元!!
这^ % D #个是通过下面的价格算出来的。新手做这个实验大概要2个小时左右,两台服务器大概开支会在5刀左右,所以做完了实验一定要记得删q y 5 U U { 除自e c y ^ X h P a己的数据库!!
数据库创建中
我顺便创建了一个安全组,允许我Q 0 H自己的机器访问1433和3306端口 。(目前为止没问题,但是这是第二个坑,m L B b后面会有问题)
按照上面的操作步骤,我又创建了一个 Aurara的数据库,他会自动创建一个cluster,然后把你新建的V R 1 z = s ! s q成员放在里面(即使只有一个)
最后我的两个RDS的Instance就创建好了。deS a ( ?mo1 是 MSSQL,做为我的source,demo2是Aurora,作为destination
创建好了以后,我需要生成一些测试用的table和数据。 首先看看 MSSQL的 Endp- V Eoint
在我的本地j . } Z l电脑上通过MSSQL Management 工具连接。理论上,这一步应该很简单,如果我的安全组策略正确的话。这里我遇见了第一个坑。我的本地电脑网络和AWS VPC直接是 S2S 的连接,然后AWS认为我的计o z ! L . D % / +算机属于内网,他很智能地把他的| ) z z X . M }域名解析为内部IP。第一次我测试的时候是把RDS配置在另外一个不同_ d Q的VPC里面,我的B u = g计算机和这个VPC的网络之间并没有路由,也没有配置Gateway,内网访问是不U K k n ] P通的,尽u W h管他z n ~有一个公网IP,但是AWS自动给我解$ n 2 J e O H h析为内网IP之后,我的路由会找不到对应的路径导致我始终无法访问。最后我只能重建RDS,然后确保他8 w C | b N 3 |在的VPC和我的计算机网络之间6 @ u G存在了S2S连接关h s Q系。
连接之后,执行SQL脚本,他会创建一堆表,并插入一些测试数据
下载安装 Schema Conversion Tool
下一步我们需要在我的电脑上安装 SCT 工具。
在下面的连接上下载SCI,MSSQL 的 JD@ - g N H kBC 以及 MySQL的 JDBC
https://docs.aws.amazon.coi ? j X S 7 ; f mm/SchemaConversionTool/latest/userguide/CHAP_Installing.html
然后打开SCT,选择新建一个项目
勾选我们要迁移的数据库,之后在Action 选择 Create Report
他会扫描你的 MSSQL 数据库进行评估是否可以转换。
下面是生成的报告
下一步就是进行Schema的转换
几秒之后 可以看见Schema已经在Aurora这边生成了
配置DMc x $ e p mS
登录AWS 控制台 , 选择 Database Migration Service。这里我需要创建一个用来同步的InstZ $ ~ Vance,类似EC2实例,但是由AWS来管理,创建Source Endpoint和 DeH 0 7 Nstination Endpoint,最后创建一个任务来同步。
首先来创建一个 replicat$ = 2 . 7 F .ion instance
注意他所选择的VPC Ss p r . [ u B ]ecuirty Group 是= F h z m我之前创建的,这里其实是有问题的
创建完成之后 我们来继续创建Endpoint。
Endpoint 创建完之后一定要测试 Connecti, M S 4 X = 8 xon。
创建之后的样子
创建好了之后来测试一下,7 y p n不通!!
我在这里卡了至少1个小时。最后q o c ;发现有3个坑在这里。
首先,我之前配置这个SG的时候,只允许了我本地的机器访问,我的DMS的服务器是不行的,因此这里我们需要把这个DMS的内网IP也加进去;
第二:SG的outbound rule默认是所有都打开的,我无意中进行了限制,因此需要确认outbound rule是放行的
第三:我有一个NACL在这个公网subnet? ~ ) h %上,因此我还得在NACL上面放行
修改我的SG inbound rule 和 outbound rule
修改我的NACL
再测试一下连接成功
最后,我们来创建一个任务进行同步
添加一个 selection rule
等待2 分钟之后x X F u $ # Q e b 进度条显示成功
发表评论