您的当前位置:首页>全部文章>文章详情

MYSQL数据库迁移之Mysqldump和AWS的DMS服务对比

gathin发表于:2023-01-01 21:55:33浏览:428次TAG: #AWS #DMS #mysqldump

迁移任务情况

本次要进行的迁移任务是将自建在EC2上MYSQL数据库迁移到RDS,master不动,先添加一个RDS-slave从库;
本库中数据量大小加索引总共800G左右(其实去了索引总共就286G);考虑使用一台slave的MYSQL磁盘快照根据之前的AMI另起一台从库,追上主库后停止同步,此时这个新EC2的slave库无数据新增了,再同步到RDS数据库中,

使用Mysqldump迁移

迁移到RDS数据库如果数据库不大 可以使用mysqldump使用管道的方式同步到RDS数据库中
使用以下命令查看MYSQL自带information_schema信息库查询估算各个库的索引+数据量的大概大小,

mysql> SELECT t.TABLE_SCHEMA "db name", ROUND(SUM(t.INDEX_LENGTH+t.DATA_LENGTH)/1024/1024,2) "database size MB" FROM information_schema.TABLES t GROUP BY t.TABLE_SCHEMA

#下面这个是估算非索引只是数据的大小,其实就是吧 t.INDEX_LENGTH 拿掉不累加

mysql> SELECT t.TABLE_SCHEMA "db name", ROUND(SUM(t.DATA_LENGTH)/1024/1024,2) "database size MB" FROM information_schema.TABLES t GROUP BY t.TABLE_SCHEMA

本人迁移测试数据+索引大小在5G左右 在EC2和RDS内网中mysqldump迁移速度在10分钟差不多
使用以下命令进行管道直接倒到RDS中

#全库导入的模式
$ mysqldump --databases <you_db1> <you_db2> --set-gtid-purged=off --single-transaction --compress --order-by-primary --routines=false --triggers=false --events=false -uroot -pWelcomeMay | mysql --host="192.168.1.101" --port=3306 -u admin -p123456 

#单表导入模式
$ mysqldump --databases <you_db1> --tables <you_table> --set-gtid-purged=off --single-transaction --compress --order-by-primary --routines=false --triggers=false --events=false -uroot -p123456 | mysql --host="192.168.1.101" --port=3306 -u admin -p123456 <you_db1>

这里说明下为什么要 —routines=false —triggers=false —events=false 禁用 事件存储过程和触发器,应为AWS 的RDS 他自己本身就内置封装了自己的相关东西,不支持你导进去,还有导入后 如果你再导入数据有触发器什么的也会对数据进行影响;
管道后面指定的数据库,如果不指定导入后 RDS会报错,他不知道下面的数据该应用的哪个数据库

使用AWS-DMS迁移数据

1.创建复制实例
首先创建一个复制实例,它其实是相当于一台专门帮你迁移数据中转做处理的服务器;配置可以根据你的数据库大小来选择合适的;不过如果库大还是要选大一些配置,不然他同步大表的时候就会出些问题还会中断需要不断重启任务才能完成;
在DMS主页,进入【Migrate data】->【Replication instances】->点击[Create Replication instances]

图片alt

按参数填写创建后,就可以开始创建端点了,先把RDS创建好,并且吧自己的表结构MYSQLDUMP 的方式导进去先;

进入【Migrate data】->【Endpoints】->点击[Create endpoint]

这里的端点 Target(目标)、Source(源)类型之分 target 是你准备要导入数据的RDS数据库,source 是要导出数据的源 EC2数据库;并需要选择你相应的数据库环境,指定连接方式,我选择Provide access information manually使用手动,(注意:这里如果是 填写的 【源】类型数据库连接账号 最好有super权限,不然嘿嘿!!,当然目标类型就有对应写入权限了)

图片alt
下面还可以使用 上面创建的 replication instances 进行测试是否能连接到对应的数据库
好了 Target、source创建好之后 就可以开始创建迁移任务了

进入【Migrate data】->【Database migration tasks】->点击[Create task]
选择你之前创建的 复制实例服务器、目标端点、源端点,最后 migration 类型选择 有三种,1.迁移当前数据2.迁移当前数据并持续性的复制,3.值复制新增的数据,这个功能挺强大类似从库了
图片alt

下面的任务设置中,可以继续设置 对目标和 源的数据的一些操作,
图片alt
比如拷贝数据的时候 要不要删除目标端点上面已经存在的表。(之前已经导入架构了不建议删除,他会直接往里面写数据,选择Do nothing)
,下面继续指定要拷贝源的信息,可以指定架构就是 数据库%,表%,可以使用通配符%,还可以指定数据条件,以及是包含还是排除这些条件
图片alt
创建后他就开始工作了。