MySQL 多源複製場景分析

今天有客戶問起:如何彙總多臺 MySQL 數據到一臺上?

我回答:可以嘗試下 MySQL 的多源複製。

我們知道 MySQL 單主一從,單主多從,或者級聯的主從架構我們都見的很多了。但是多主一從這種使用場景比較少,比如圖 1:

技術分享 | MySQL 多源複製場景分析

這種架構一般用在以下三類場景

1. 備份多臺 Server 的數據到一臺

如果按照數據切分方向來講,那就是垂直切分。比如圖 2,業務 A、B、C、D 是之前拆分好的業務,現在需要把這些拆分好的業務彙總起來備份,那這種需求也很適用於多源複製架構。

實現方法我大概描述下:業務 A、B、C、D 分別位於 4 臺 Server,每臺 Server 分別有一個數據庫來隔離前端的業務數據,那這樣,在從庫就能把四臺業務的數據全部彙總起來,而不需要做額外的操作。那沒有多源複製之前,要實現這類需求,只能在彙總機器上搭建多個 MySQL 實例,那這樣勢必會涉及到跨庫關聯的問題,不但性能急劇下降,管理多個實例也沒有單臺來的容易。

技術分享 | MySQL 多源複製場景分析

2. 用來聚合前端多個 Server 的分片數據。

同樣,按照數據切分方向來講,屬於水平切分。比如圖 3,按照年份拆分好的數據,要做一個彙總數據展現,那這種架構也非常合適。

實現方法稍微複雜些:比如所有 Server 共享同一數據庫和表,一般為了開發極端透明,前端配置有分庫分表的中間件,比如愛可生的 DBLE。

技術分享 | MySQL 多源複製場景分析

3. 彙總併合並多個 Server 的數據

第三類和第一種場景類似。不一樣的是不僅僅是數據需要彙總到目標端,還得合併這些數據,這就比第一種來的相對複雜些。比如圖 4,那這樣的需求,是不是也適合多源複製呢?答案是 YES。

技術分享 | MySQL 多源複製場景分析

那具體怎麼做呢?

我舉個例子,比如下面一張表 A,字段分表為 ID(主鍵)、F1、F2、F3... 、F100。那按照這樣的分法,前端 4 臺 Server 的表分別為:

  • A1(ID,F1,F2,...,F25)
  • A2(ID,F26,F27,...,F50)
  • A3(ID,F51,F52,...,F75)
  • A4(ID,F76,F77,...,F100)

那上面幾張表的數據如果要合併到表 A,可以建立一個 Event,定時的來給表 A 裡插入數據。涉及到的核心 SQL 為:

那我們發現這個和第一個類似,只不過,所有的表最後到複製到了相同的數據庫裡。

總結下,我上面簡單說明了 MySQL 多源複製的三種常用使用場景,希望對大家有所幫助。


分享到:


相關文章: