一种不停机的亿级数据迁徙方案

需求背景

数据是一个公司最大的财富。伴随数据的增长以及使用场景的改变,需要对存储介质进行升级,此时需要进行数据迁徙。下面列举几个场景:

  • 公司一开始使用oracle或者sqlserver等商业数据库来存储数据,随着公司业务的发展,数据量越来越大,数据增长速度越来越快。传统oracle和sqlserver不仅成本高昂,而且不易于横向扩展,无法满足大数据量的存储和读写。公司决定选择免费的mysql数据库,并进行分库分表,免费并且稳定。
  • 公司成长越来越大,进行了自研的弹性数据库,决定把分库分表的Mysql数据迁徙到自研的弹性数据库。 本文使用Sqlserver数据迁徙到Mysql来举例说明。

数据迁徙面临的挑战

需要在迁徙过程保证数据的完全正确,并且迁徙过程中,数据在不断发生变化。并且在迁徙的过程中,不能影响线上客户,本文给出一个数据迁徙的套路,保证整个迁徙过程顺利完成。

DBA迁徙方案

迁徙工作DBA来做,DBA先停止数据库的使用,然后书写迁徙脚本把数据导出到一个中间文件。然后再书写导入脚本,导入目标库。此方案虽然简单,但有很大的局限性,使用的场景有限。

  • 数据库会停止服务几小时甚至几天,应用程序无法使用,在一些行业应用中基本不可接受。

  • 不能满足异构数据的迁徙,如果oralce或sqlservcer和mysql的数据结构不一样,有着比较复杂的映射关系,需要做数据转换,不能满足迁徙。

开发数据迁徙程序

整个迁徙程序通常有如下程序开发工作: 1) 应用程序改造: 接管读写:接管所有数据的读的写,为后续的切读流量或者切写流量做好准备。 切量改造:支持异步回放线上流量进行数据验证;支持按读流量和写流量进行切流;

2) 开发增量数据迁徙程序: 把原数据库的数据变化不断迁徙到新数据库中,有如下方式: - 方式1可以通过加入log变更表,并使用事物保证; - 方式2可以通过业务双写; - 方式3可以通过MQ消息,或接收类似Canal类的增量数据出发机制。

3) 开发全量迁徙检验程序: 遍历全部原库数据,判断是否和目标一致,不一致进行迁徙覆盖到目标库,操作幂等,并进行报警。

上线过程

整个上线过程,先进行全量迁徙或增量迁徙并不重要,重要的是全量对比程序和增量对比程序,对比程序有对比和修复的功能,能够处理掉任何中间过程的异常不一致数据;等到全量和增量对比程序稳定不报错的时候,就可以进行切量验证及切量了。附图:

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值