如何在數(shù)據(jù)庫遷移中保證數(shù)據(jù)一致性逻恐?

當一個系統(tǒng)存在很長一段時間后像吻,經(jīng)常會使用更新的技術來提高性能峻黍、可維護性或添加新特性。其中一個變化可能會是使用哪個數(shù)據(jù)庫拨匆。這可能是最困難的改變姆涩。在遷移過程中,有兩個數(shù)據(jù)源惭每,這使得該系統(tǒng)成為一個分布式系統(tǒng)骨饿。在分布式系統(tǒng)中,保持數(shù)據(jù)一致非常困難台腥,而且很容易出錯宏赘。在本文中,我們將探索一種在遷移期間保持數(shù)據(jù)一致性的方法黎侈,并且這種方法的停機時間較短察署。

前提條件

為了使用本文描述的方法,需要滿足一些要求:

  • 源數(shù)據(jù)庫支持捕獲數(shù)據(jù)更改(CDC)的方法峻汉,如MySQL的bin log贴汪。

  • 源數(shù)據(jù)庫可以導出一致的數(shù)據(jù),并且可以在數(shù)據(jù)更改日志中標記位置休吠。

  • 目標數(shù)據(jù)庫支持ACID事務扳埂。

  • 源和目標數(shù)據(jù)庫都支持讀寫權限控制。

步驟

制定以下遷移步驟的兩個基本想法:

  1. 在給定的時間點上瘤礁,客戶端只向其中一個數(shù)據(jù)庫寫入聂喇,從而避免了分布式事務易出錯、處理速度慢的問題蔚携。

  2. 通過設置數(shù)據(jù)庫權限來實現(xiàn)數(shù)據(jù)庫切換希太。這比從客戶端代碼切換要快,而且更容易確保所有客戶端都切換酝蜒。

下面是具體步驟誊辉。

1.將源數(shù)據(jù)庫轉(zhuǎn)儲到目標數(shù)據(jù)庫

首先,我們需要源數(shù)據(jù)庫可以導出一致的數(shù)據(jù)亡脑。標記好已轉(zhuǎn)儲的位置堕澄。例如,在 MySQL 中霉咨,可以在使用 mysqldump 轉(zhuǎn)儲數(shù)據(jù)庫時帶上 --master-data 選項蛙紫,這樣生成的文件中就會記錄 bin log 日志的位置( 使用文檔 )。從源數(shù)據(jù)庫獲得所有數(shù)據(jù)后途戒,可以將它們插入目標數(shù)據(jù)庫坑傅。

因為這是第一步,所以即使失敗了也很容易處理:重新開始即可喷斋。因此唁毒,重要的是蒜茴,在導入轉(zhuǎn)儲數(shù)據(jù)時,任何錯誤都要捕獲浆西。

2. 捕獲源數(shù)據(jù)庫的更改

下一步是捕獲源數(shù)據(jù)庫的更改粉私。例如,在 MySQL 中近零,可以使用 bin log 捕獲更改并將其插入到目標數(shù)據(jù)庫中诺核。因為上一步記錄了開始位置,所以我們知道從哪里開始解析和導入更改久信。

推薦閱讀:

深入淺出Redis窖杀,十年阿里架構師分享:有了它還怕不懂Redis原理?

字節(jié)跳動總結的設計模式 PDF 火了入篮,完整版開放分享

刷Github時發(fā)現(xiàn)了一本阿里大神的算法筆記陈瘦!標星70.5K

月薪不到30k的程序員是聽不懂這個項目的

為什么阿里巴巴的程序員成長速度這么快幌甘,看完他們的內(nèi)部資料我懂了

程序員達到50W年薪所需要具備的知識體系潮售。

關于【暴力遞歸算法】你所不知道的思路

看完三件事??

如果你覺得這篇內(nèi)容對你還蠻有幫助,我想邀請你幫我三個小忙:

點贊锅风,轉(zhuǎn)發(fā)酥诽,有你們的 『點贊和評論』,才是我創(chuàng)造的動力皱埠。

關注公眾號 『 Java斗帝 』肮帐,不定期分享原創(chuàng)知識。

同時可以期待后續(xù)文章ing??

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末边器,一起剝皮案震驚了整個濱河市训枢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忘巧,老刑警劉巖恒界,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異砚嘴,居然都是意外死亡十酣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門际长,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耸采,“玉大人,你說我怎么就攤上這事工育∠河睿” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵如绸,是天一觀的道長文留。 經(jīng)常有香客問我好唯,道長,這世上最難降的妖魔是什么燥翅? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任骑篙,我火速辦了婚禮,結果婚禮上森书,老公的妹妹穿的比我還像新娘靶端。我一直安慰自己,他們只是感情好凛膏,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布杨名。 她就那樣靜靜地躺著,像睡著了一般猖毫。 火紅的嫁衣襯著肌膚如雪台谍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天吁断,我揣著相機與錄音趁蕊,去河邊找鬼。 笑死仔役,一個胖子當著我的面吹牛掷伙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播又兵,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼任柜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沛厨?” 一聲冷哼從身側(cè)響起宙地,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逆皮,沒想到半個月后宅粥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡页屠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年粹胯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辰企。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡风纠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牢贸,到底是詐尸還是另有隱情竹观,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站臭增,受9級特大地震影響懂酱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜誊抛,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一列牺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拗窃,春花似錦瞎领、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宾毒,卻和暖如春驼修,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诈铛。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工乙各, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人癌瘾。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓觅丰,卻偏偏與公主長得像饵溅,于是被迫代替她去往敵國和親妨退。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容