DTS mysql mysql之DTS的那些事

2021-10-22 13:47:50 字數 1188 閱讀 3859

最近才考慮資料庫遷移,想起了之前做dts踩過的那些坑。

dts同步binlog,開始是使用binlog event + position方式,之後追加支援了gtid。

基於資料庫遷移,比如從源a庫遷移到源b庫,包括但不限於資料庫上雲。

資料庫遷移方案有兩種場景:

(1)、停機遷移方案

這種方案是允許停服的場景,通過mysqldump就搞定了,就不說了。

步驟如下:

1、源資料庫採用row模式,開啟binlog許可權

2、需要乙個源庫的全域性schema查詢使用者,獲取源資料庫的schema同步到目標庫

3、選取某個時間點的binlog offset做標記,然後通過jdbc同步整個庫表資料到目標庫,直至完畢。

4、通過netty服務單執行緒讀取源庫binlog資料,從上一步標記的offset位置開始讀取,讀入kafka。

5、多執行緒消費kafka資料到目標庫,直至同步到最新的binlog資料,遷移完成。

第二種方案中遇到的那些坑:

1、最好選取源庫的乙個唯讀庫做為同步資料的源庫,這樣不影響源庫線上業務

2、多執行緒消費kafka時,容易出現binlog順序錯亂的問題,目前採用按表寫partition的方式,指定partitions消費,避免順序錯亂,但帶來的新問題就是kafka的各partitions資料傾斜問題。

3、目前解析binlog同步資料時,ddl和dml操作沒有特殊分別處理,如果資料量比較 大時,ddl很容易超時,導致此ddl之後同步的binlog都有問題,需要重新同步

4、同步binlog時,指定時間視窗大小,記錄同步時的binlog位置到zk上,如果需要重新同步資料,可能會導致一部分binlog重複同步。如果視窗過小,zk也扛不住

5、遇到沒有主鍵或唯一性限制的表,重複同步,會導致資料重複

6、若遇到同步blob相關型別時,若二進位制資料過大,可能導致同步失敗

7、同步服務的部署問題,源庫和目標庫都需要開公網ip。

8、同步服務的效率和源庫、目標庫的網路頻寬,資料庫配置息息相關

備註:gtid最初由google實現,mysql 從5.6.5 新增了基於 gtid 的複製方式。通過 gtid 保證了每個在主庫上提交的事務在集群中有乙個唯一的id。這種方式強化了資料庫的主備一致性,故障恢復以及容錯能力。gtid (global transaction id)是全域性事務id,當在主庫上提交事務或者被從庫應用時,可以定位和追蹤每乙個事務。

D3D遊戲開發1之準備

開始,編譯器的正確配置 第一步 安裝directx sdk june 2008 和microsoft visual studio 2005 第二步 設定directx和visual studio 2005關聯 1 開啟visual studio 2005,將d3d需要的lib 檔案目錄在鏈結器中指定...

D3D11之快取更新 update buffer

話說這兩天我寫程式遇到乙個bug,是關於如何建立的id3d11buffer的應該以一種怎樣的方式在每幀渲染進行快取資源的更新 我總結為下 填充 頂點 快取形容結構體和子資源資料結構體,並建立頂點快取 這裡用的是動態快取 d3d11 buffer desc vertexbufferdesc verte...

D3D1渲染技術之取樣

在前面的部落格,我們看到除了紋理資料之外,還有兩個與使用紋理相關的關鍵概念 紋理過濾和定址模式。取樣紋理資源時使用的過濾器和定址模式由取樣器物件定義,應用程式通常需要多個取樣器物件以不同方式對紋理進行取樣。正如我們將在下面看到的,取樣器用於著色器,為了將取樣器繫結到著色器以供使用,我們需要將描述符繫...