Mysql迁表方案

阶段一:迁表阶段(双写读旧)


步骤一:

将所有写操作加上日志,打印出 所需迁表a的主键id,供之后补偿使用。

开发补偿功能,根据ID,将old 数据与new数据同步。注:在业务低峰期对表进行操作,减少风险及补偿的开销。

步骤二:

将 old表 数据同步到 new表 中。

注:建议dba进行同步,dba同步只能对空表进行同步,但速度快,数据量大,RD同步数据困难切慢,BI同步数据为前一天的数据,不可用。

步骤三:

双写操作,所有写操作同时写入 new表 与 old表 中。

注:开发之前需统计所有写入表操作,最好将写入操作收口,做不好会导致新旧表数据不同步,前功尽弃。

步骤四:

使用步骤一中开发的补偿功能,将上线这段时间的数据 同步的修复一下,保持 old表 与 new表中的数据一致性。

注:insert操作还好,new表不存在时可同步old表,update操作需要做补偿,尤其是当本次更新需要依赖上一次更新状态时,数据同步是个问题。

总结:

至此,数据同步完成,old表 与 new表 数据保持一致,已实现双写读旧操作,上线两次,分别为打印日志操作上线和双写操作上线,数据同步两次,分别是DBA同步新表数据及修复上线过程中更新的数据。

此时线上的读操作全为 读旧,需逐步整理出来,提供新的查询接口。

注意实现及风险:

步骤三中的双写使用同步双写,禁止使用异步双写。

对表进行写入操作的地方,加数据源,尽量不对逻辑做改动。

若表 写操作过多,打印日志需注意覆盖所有写操作及日志规范,尽量覆盖到所有写操作中。

可以开发新功能,对比new与old数据是否同步。

尽量选择业务低峰期,进行迁表操作。

 

阶段二:切表阶段(双写读新)

步骤一:

与迁表操作同步进行,各业务线统计协助统计 表 使用情况,包括调用接口,传入参数或sql。

步骤二:

(依赖第一阶段及第二阶段步骤1)将统计出现有的old表 接口中,分辨出有哪些接口是现在业务线正在使用的,在不影响线上功能的情况下,对不合理的接口进行重构,避免传入sql操作,做到接口功能明确,功能单一。

步骤三:

对业务线进行新表新接口切换,陆续开发并推进切换新接口,在所有业务线平滑的切换新接口完成后,下线双写操作,只保留写新读新。此时 表迁表完成。


欢迎关注订阅微信公众号,程序员的压哨绝杀,一起分享生活工作中的见闻趣事。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值