數據庫平滑遷移方案與實踐分享


背景:
     在一個數據庫中存在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(指定表,指定更新時間范圍)—相當於后門


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM