MySQL分庫分表遷移方案

2021-10-14 07:41:59 字數 972 閱讀 7506

現在有乙個未分庫分表的系統,未來要分庫分表,如何設計才可以讓系統從未分庫分表動態切換到分庫分表上?

你看看,你現在已經明白為啥要分庫分表了,你也知道常用的分庫分表中介軟體了,你也設計好你們如何分庫分表的方案了(水平拆分、垂直拆分、分表),那問題來了,你接下來該怎麼把你那個單庫單錶的系統給遷移到分庫分表上去?

所以這都是一環扣一環的,就是看你有沒有全流程經歷過這個過程。

這個其實從 low 到高大上有好幾種方案,我們都玩兒過,我都給你說一下。

接著到 0 點停機,系統停掉,沒有流量寫入了,此時老的單庫單錶資料庫靜止了。然後你之前得寫好乙個導數的一次***,此時直接跑起來,然後將單庫單錶的資料嘩嘩嘩讀出來,寫到分庫分表裡面去。

導數完了之後,就 ok 了,修改系統的資料庫連線配置啥的,包括可能**和 sql 也許有修改,那你就用最新的**,然後直接啟動連到新的分庫分表上去。

驗證一下,ok了,完美,大家伸個懶腰,看看看凌晨 4 點鐘的北京夜景,打個滴滴回家吧。

但是這個方案比較 low,誰都能幹,我們來看看高大上一點的方案。

這個是我們常用的一種遷移方案,比較靠譜一些,不用停機,不用看北京凌晨 4 點的風景。

然後系統部署之後,新庫資料差太遠,用之前說的導數工具,跑起來讀老庫資料寫新庫,寫的時候要根據 gmt_modified 這類字段判斷這條資料最後修改的時間,除非是讀出來的資料在新庫里沒有,或者是比新庫的資料新才會寫。簡單來說,就是不允許用老資料覆蓋新資料。

導完一輪之後,有可能資料還是存在不一致,那麼就程式自動做一輪校驗,比對新老庫每個表的每條資料,接著如果有不一樣的,就針對那些不一樣的,從老庫讀資料再次寫。反覆迴圈,直到兩個庫每個表的資料都完全一致為止。

接著當資料完全一致了,就 ok 了,基於僅僅使用分庫分表的最新**,重新部署一次,不就僅僅基於分庫分表在操作了麼,還沒有幾個小時的停機時間,很穩。所以現在基本玩兒資料遷移之類的,都是這麼幹的。

Mysql分庫分表方案

1.為什麼要分表 當一張表的資料達到幾千萬時,你查詢一次所花的時間會變多,如果有聯合查詢的話,我想有可能會死在那兒了。分表的目的就在於此,減小資料庫的負擔,縮短查詢時間。mysql中有一種機制是表鎖定和行鎖定,是為了保證資料的完整性。表鎖定表示你們都不能對這張表進行操作,必須等我對錶操作完才行。行鎖...

mysql分庫分表方案

分庫分表的幾種方式 1 把乙個例項中的多個資料庫拆分到不同的例項 2 把乙個庫中的表分離到不同的資料庫中 3 對乙個庫中的相關表進行水平拆分到不同的例項資料庫中 如何選擇分割槽鍵 1 分割槽鍵要能盡量避免跨分片查詢的發生 2 分割槽鍵要能盡量使各個分片中的資料平均 如何儲存無需分片的表 1 每個分片...

MySQL分庫分表方案

不管是io瓶頸,還是cpu瓶頸,最終都會導致資料庫的活躍連線數增加,進而逼近甚至達到資料庫可承載活躍連線數的閾值。在業務service來看就是,可用資料庫連線少甚至無連線可用。接下來就可以想象了吧 併發量 吞吐量 崩潰 1 io瓶頸 第一種 磁碟讀io瓶頸,熱點資料太多,資料庫快取放不下,每次查詢時...