1、背景
OB 原生是支持 MySQL 协议的,所以其数据的切换时相对简单的,但是如果是进行生产环境的数据迁移有很多的细节还是要注意到,在生产环境进行迁移,安全保障也是重中之重。
2、数据迁移过程
数据迁移主要就是数据复制工具进行数据复制来进行迁移,数据复制的工具在下面的章节会具体的讲到。
2.1、搭建数据迁移复制工具
在生产环境是业务系统读写都正常访问MySQL数据库,首先要搭建OB数据库,保证两边的数据一致就可以进行数据同步复制了。
2.2、进行数据禁写
业务系统进行数据的禁写,进行禁写的主要目的就是保证 MySQL 和 OB 的数据可以达到一致,因为数据的复制是有一定的延迟的,所以必须等待一段时间数据才可以同步完成。
这里有两点注意事项业务有损:禁写时如果有业务进来,肯定会报错,所以业务上是与损的,所以这里禁写的时间要十分注意,这里在下文中会进行具体的讲解。
切换时间:这里的切换时间应该是在业务低峰期处理
2.3、切换数据源
业务系统切换数据源到 OB 数据库,注意这里还是在禁写的状态,所以这个时候还是处于业务有损的状态,数据同步工具进行反向的复制,为下一步做准备。 之所以进行数据的反向复制,也是为迁移回滚进行准备条件,如果在后续的运行当中发生迁移问题,还是可以切回到MySQL数据源上。
2.4 开启写操作
业务系统在OB数据源上开启写操作,这样业务系统就正式切换到OB数据源上了,但是此时同步工具还没有停止。
2.5、停止数据同步
如果观察一段时间OB数据使用没有任务问题,反向同步就可以停止了,原先的数据库也可以做回收处理。
3、业务保障
在上文中提到在数据源切换过程中对业务是有损的,所以应该非常注意注意切换的时间,最好的时间就是业务量最低的时间,理想状态是没有业务的时间,着一点可以通过监控平台的日常数据可以分析出最合适的时间。实际的等待数据同步时常和同步工具有关,但是一般情况下应该不会太长,一般应该在几分钟以内。
4、数据同步工具选型
云厂商一般都会有相应的数据库同步工具,阿里云上 DTS 就是一款功能强大的数据同步的工具,可以参考官网上的说明进行使用。
5、数据库代理的应用
如果是应用直连数据库,上述切换的过程需要修改业务系统数据源配置文件进行修改,而后进行重启,着一部分可以下沉到数据库代理上。数据代理很多会用在分库分表的场景下,都是多数据源这里可以应用到数据源切换上。如果数据代理可以有自身的管控平台,通过管控平台修改相应的配置就可以,整个操作都是可以在浏览器中完成。蚂蚁依靠LDC 弹性技术完善了上述的功能。
DDS 是一款 强大的数据库代理工具,详细可以参考官网上使用。
5.1、SQL验证
虽然OB是兼容MySQL协议的,但是也没有 100% 的适配MySQL 的 SQL 语法,对于一些生僻的语法 OB 可能是没有支持的,如何去验证这里SQL是否存在当前的业务系统中,如果依靠人为去检查这个工作量是非常大的。
SQL的验证的能力也可以下沉到数据代理上,其提供双写的功能,所谓的双写就是在把SQL写入到目标数据库的同时,用户还可以 指定一个 DW 库(Double write)。数据库代理也会把SQL写入到这个库当中,如果指定一个 OB (DW)库,就可以进行数据库的验证,当SQL执行发生错误时候,数据库中间件会记录相关的错误信息,这个验证可以在上述第一步就可以开始。
6、分库分表分配迁移
现在大型的业务系统都设计到了分库分表,数据迁移的时候如果审涉及到了分库,就应该按照分库的维度进行批量迁移,比如是按照 UID 进行分库,拆分 100个库,可以按照 10个UID 为一组进行迁移,一个UID对应一个数据库。
7、监控
整个的迁移过程随时可能会影响到业务,在迁移的过程必须有相应的监控,涉及到的影响面最好有一个整体的监控大盘,如果有问题可以随时进行止血。
如果监控系统可以自动分析数据库的影响面自动的拉起监控这样就更为的便捷和安全。
8、OB 自带迁移工具
OceanBase 迁移服务(OceanBase Migration Service,OMS)是 OceanBase 提供的一种支持同构或异构 RDBMS 与 OceanBase 之间进行数据交互的服务,它提供了数据的在线迁移和实时增量同步的数据复制能力。
有兴趣也可以去官网上进行了解。