最近才考慮資料庫遷移,想起了之前做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渲染技術之取樣
在前面的部落格,我們看到除了紋理資料之外,還有兩個與使用紋理相關的關鍵概念 紋理過濾和定址模式。取樣紋理資源時使用的過濾器和定址模式由取樣器物件定義,應用程式通常需要多個取樣器物件以不同方式對紋理進行取樣。正如我們將在下面看到的,取樣器用於著色器,為了將取樣器繫結到著色器以供使用,我們需要將描述符繫...