在我们的工作中,当企业内部使用的数据库种类繁杂时,或者有需求更换数据库种类时,都
可能会做很多数据迁移的工作。有些迁移很简单,有些迁移可能就会很复杂,大家有没有考
虑过为了顺利完成复杂的数据库迁移任务,都需要考虑并解决哪些问题?
以前的工作迁移过 oracle 到 Informix、oracle 和 SQLSERVER、oracle 到 mysql。 在目
前的公司又因为去 o 的关系,做了大量的迁移工作,栽了不少坑,所以和大家交流一下在
迁移的过程中的一些实践。
因为成本预算等多方面的原因,公司决定要去 o,在去 o 之前首先要决定拿什么来替代
oracle,拿什么工具将源数据库的数据导到目标数据库,怎么导,等等的问题。导的过程的
增量数据怎么处理。导的时候源数据和目标和数据的数据类型差异如何处理,像视图,存储
过程,触发器这种数据库对象之间的不同怎么解决,导的时候如何不影响源数据库性能。导
完以后的数据比对以及数据无误后应用的性能问题都是要考虑的。
在我们做数据迁移之前先确认的就是 target database ,就是要迁到什么数据库上,经过
了一些调研从速度,流行度等多个方面选择了 MySQL 因为相信被 Oracle 收购后表现会越
来越好,当然也想过使用 PosgreSQL,不过做了一个测试,发现 MySQL5.7 的 QPS 在比同
样配置的 PG 要高,基于在线事务对性能的要求,最终还是选择了 MySQL.选择了 mysql
以后,对于 mysql 的分枝和版本的选择也很头痛。Percona 增加了很多性能相关补丁,
MariaDB 支持更多的引擎,官方的版本也能满足目前的需求,从保守的原则上,我们的核
心的数据库最终还是使用了官方的版本,一些不是太核心的数据库,其他的分支也有在用。
因为 mycat 的支持关系最终选择的是 5.6 的版本(目前 mycat1.6 对 mysql5.7 的支持不是
太好)为了达到像 oracle 的 dg/ogg 一样稳定的架构,我们把 mysql 的架构做成了双机
房的 mha,并且用了 mycat 做了读写分离。同样的 ORACLE 这边因为同时还有应用在
跑,为了分散 oracle 的压力.所有的同步作业也是在备库和异机房的 ogg 端进行的操作。
在选择了合适的 db 来替换 oracle 之后,下一步就是选择一个合适的迁移工具来做迁移
了,我们在迁移工具的选择方面花费了大量时间和精力。迁移是一个漫长而困难的工作,我
们在迁移的过程中也历经了不同的阶段,使用了不同的方法。从最初级的 load csv 升级成
自已写的程序,再去找 oracle 和 mysql 官方推荐的工具,最后也尝试了一些 ETL 的工具,
被这么多工具摧残之后,幸运的是能够在不同的场情下使用不同的方式。接下来我们对每一
种都进行一个简单的介绍和使用中遇到的一些问题.