如何利用pgloader实现MySQL到PostgreSQL的快速迁移

发表时间: 2020-08-06 18:27

需求背景

PostgreSQL 是现在增长很快的开源数据库,相比MySQL拥有更多的数据结构支持,也有更多的索引类型,性能还是很不错的,之前有一个项目使用的是MySQL,考虑到使用PostgreSQL更适合,也更方便进行索引优化,所以有这么一个需求。

使用pgloader进行迁移

编写代码迁移,可能后续还有很多项目需要迁移,整体成本较高,经过搜索引擎查询到这个工具可以快速迁移,于是开始尝试使用这个工具迁移

前置要求

我们现在是all in 阿里云的情况,那么这种情况下,RDS的权限并不是最高的superuser的,所以就比较尴尬,如果进行迁移,那么需要在本地搭建一个PostgreSQL数据库,建议使用ubuntu 20.04操作系统进行操作,因为内置的PostgreSQL数据库是12版本非常方便

# 安装pg数据库和pgloaderapt update apt install postgresql-12 pgloader -y# 切换到postgres用户su - postgres# 创建一个目标数据库createdb cloudnative

使用pgloader进行转换迁移

pgloader这个项目你去到github看,会给你一个命令告诉你如何迁移,我想你肯定看到了,我想说的是,不要使用这种方式,会有一些问题,首先要创建一个loader的文件,就叫mypg.loader吧,将下面内容放进去

LOAD DATABASE FROM      mysql://user:passwd@192.168.1.185:32772/nova INTO pgsql:///cloudnative alter schema 'cloudnative' rename to 'public';

上面最后一行很关键,是用来处理迁移后有可能relation和sequence位置不对导致数据有问题的

注意,这一部分操作都在postgres用户下进行,比较方便,然后执行下面的命令

pgloader mypg.loader

等那么一会儿,我的数据库就迁移好了,然后再dump出来导入到RDS 就可以了,记得RDS也要用pg12啊

整体迁移进度虽然还算是顺利,但是时间还是比较长的,4核4G的ECS,从MySQL到pg,2.5G数据量大概需要20min这样的,然后还需要一段时间导入到RDS

后续我们需要将测试环境的程序跑起来,看看跑起来有什么问题,代码需要进行一些修改,完成后我们就可以上线了