侧边栏壁纸
博主头像
再见理想博主等级

只争朝夕,不负韶华

  • 累计撰写 112 篇文章
  • 累计创建 64 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

分库分表后数据迁移方案

再见理想
2022-05-26 / 0 评论 / 0 点赞 / 779 阅读 / 1,210 字

方案一:停机部署

挂停机公告,例如0-6点系统维护,无法访问。接着到0点,停机,系统挺掉,没有流量写入了,此时老的单库单表数据库静止了。然后之前得写好一个导数的工具,此时直接跑起来,然后将单库单表的数据读出来,写到分库分表里面去。
导数完了之后,验证下数据是否一致。ok了,修改系统的数据库连接配置啥的,包括可能代码和SQL也许有修改,那你就用最新的代码,然后直接启动连到新的分库分表上去。

有什么缺点:
① 系统必须进行停机一段时间;
② 如果在规定的一段时间内并未完成数据的迁移,就需要回滚,重新切回原库。第二天凌晨继续干;
③ 开发人员比较疲惫。


方案二:双写迁移方案

在不停机条件下需要对数据的迁移,这里推荐我们常用的一种方案,也就是在线双写的机制。

① 通过在写原有的数据库的同时也写一份数据到我们的新的库表中。

② 同样写一个后台迁移数据的程序,将我们的旧库的数据通过我们的数据库中间件迁移到新的多库表中。

③ 在迁移的过程中,每次插入数据的时候,还需要检测数据的更新情况。比如,如果新的表中没有当前的数据,则直接新增;如果新表有数据并没有我们要迁移的数据新的话,我们就更新为当前数据,只能允许新的数据覆盖旧的数据。

④ 经过一轮之后,也就是假如旧表中1000万条旧数据迁移完之后,我们就需要进行校验,校验两边数据是否是一模一样的。

⑤ 这样反复的跑了几天之后,就数据库和新的数据库肯定是会一模一样的,最后观察下数据正常了,就可以停掉旧库的写入动作了。


数据表迁移数据一致性验证

在迁移数据库的时候做一些必要的验证还是很有用的,比如说迁移前后的数据条数是否一致,数据是否一致,这个时候怎么办呢,验证条数还好说,要是验证数据是否一致呢,对于重要的数据当然要每条都不会有差错,随机抽样验证肯定是不行的,万一遗漏了就麻烦了,而且两张表不再同一台服务器上。

验证方案一:

① 从表中选取几个重要字段,比如说A、B、C,用这几个字段作为比对的标尺;
② 从原表中导出每条数据的这三个字段到一个文件f1中;
③ 从目的表中到处每条数据的这三个字段到文件f2中;
④ 比对文件f1、f2文件中的每条数据是否相同;
⑤ 得出结论。

缺点:首先就是不是所有字段,仍然有可能在非主要字段出现different;整体效率比较低。

验证方案二:

① 对表中的每n条数据进行拼接(直接连接起来,n取值取决于每条数据的数据量大小)。
② 计算这n条数据的md5值,添加到文件f1中,直到所有数据取值完成。
③ 对目的表也一样,记录的文件f2中。
④ 比对文件f1、f2文件的md5值,如果一致,ok,成功。
⑤ 如果不一致,从上倒下比对每条md5值,找到第m条不一致。
⑥ 得出结论,不一致的数据在m*(n-1)+1 ~ m*n之间,可以再次选择定位。

第二种方法的好处就是输出文件会在一定范围缩小,比对方便,但是也有缺点,不能像第一种方法一样直接通过关键字段定位不同数据的位置。


参考:

开源博客:数据库分库分表后,我们生产环境怎么实现不停机数据迁移
CSDN:怎么进行分库分表以及数据迁移
博客园:数据表迁移数据一致性验证

0

评论区