ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

数据库平滑迁移方案与实践分享

2021-11-17 14:35:47  阅读:117  来源: 互联网

标签:binlog 数据源 平滑 切换 迁移 数据 数据库 进行


背景:
     在一个数据库中存在A表与B表,但AB两个表按目前架构边界划分的话,是属于两个组织下的两个系统,导致相互之间有稳定性风险。为增强系统稳定性,进行存储分离。准备将B表的所有数据,迁移到新库中。

可能存在的问题:
1、由于原来的AB表在一个数据库中,代码中可以用事务控制两个表,迁移后不支持本地事务,如何解决?
2、原来是一个数据源,现在分为两个数据源,如何解决?
3、由于这两个表,是核心链路的核心数据,迁移过程无法停机迁移,如何保证安全稳定的不停机平滑迁移?
4、迁移过程如何保证数据一致?

迁移准备工作:
1、表准备
2、事务支持需要找相关人员确认,应对事务解耦后的方案
3、数据源梳理

集群迁移方案:
一、整体方案
DBA线上创建新数据库,同步原数据库数据; 
1、全量同步方案: 源库导出数据进行全量初始化,dba通过多线程抽取源数据进行插入
2、增量同步方案: 记录全量时刻的binlog位点,通过binlog进行数据增量同步  增量数据进行数据一致性校验,通过工具进行数据校验;
3、系统中配置多个数据源,涉及到的表具有开关;可进行双写、指定写新库/老库,指定读主库/新库
4、代码上线 ,上线后写老库,读老库;不做任何变更
5、增量数据此时已经开启;
6、选取流量低峰期打开双写开关,观察写新库是否存在报错,且对整体的tps是否有影响;大约5min左右
7、关闭增量数据同步,观察30min,无异常报错,且数据正常写入,只保留双写。 此时数据校验进行新增数据校验;如果产生问题,进行开关回切,增量binlog继续打开
8、观察业务有无异常,跑一周时间,观察数据是否有告警
9、切换读新库,跑一周时间
10、无异常,选取流量低峰期进行 大数据切换读新库备份机、binlog切换读新库备份机,此时会有一小段时间的重复数据产生,下游数据需要自己保证幂等性。
11、关闭老库写操作
12、跑一段时间,无问题,完全走新库
二、具体流程图

注意点:
原数据库的binlog事件,需要提前接入;binlog监听维度的切换是在代码上线之前即可监听,外围需要保证幂等性;
大数据是否有抽取数据,需要确认;切换完成后,需要抽取新的库数据;  大数据进行抽数需要进行lion变更;
确认update是否会进行覆盖,可能存在覆盖,但是两者应该最终一致
迁移过程可控,问题可发现;老库写入确保无问题
binlog数据消费可能早于新库写入,因此切换读流量前需要进行binlog切换
乐观锁多版本更新,系统异常可感知,业务异常不可感知,乐观锁更新双写情况下保证最终一致性
查询业务流量做比对

风险点: 
由于连接修改在mapper层面,防止有mapper.method方法覆盖不全导致的写数据丢失
需要增加比对数据任务,进行数据比对
需要增加同步数据任务,防止切换过程数据丢失,进行数据弥补
数据比对、数据修复脚本、告警:

通过脚本(增量数据比对)
job手工比对(存量数据的比对)
修复数据job(指定表,指定更新时间范围)—相当于后门

标签:binlog,数据源,平滑,切换,迁移,数据,数据库,进行
来源: https://www.cnblogs.com/whgk/p/15567122.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有