目前主流的 MySQL 在線變更方案有兩個:
- 基于 trigger 的 pt-online-schema-change
- 基于 binlog 的 gh-ost
上周 Sendbird 剛開源了他們的 MySQL Schema 在線變更方案 SB-OSC: Sendbird Online Schema Change。
GitHub 上剛剛 25 顆星星,絕對新鮮出爐。
亮點
SB-OSC 采用了和 gh-ost 一樣的 binlog 方案。重新造輪子主要是為了解決兩個問題:
大幅提高遷移速度
使用 gh-ost 時,如果碰到有大量寫入操作的表,可能導致 gh-ost 來不及轉移更新的數據,也就永遠無法完成在線變更。SB-OSC 使用了多線程,并且把遷移明確地分成了兩個階段:
階段一:存量導入
階段二:增量導入
和 gh-ost 的性能比較
斷點續傳
gh-ost 如果中途斷了,那只好從頭來過。想想一個在線大表變更已經執行了 3 天,到最后一晚莫名掛掉。造成發布延期,團隊能有多崩潰。SB-OSC 保存了執行進度,可以從中斷的地方繼續。
局限
首先是需要依賴的組件,只能跑在 AWS 上。
適用范圍
比較頭疼的是第一條,因為表采用 UUID 作為主鍵是很常見的。
總結
SB-OCS 目前還是一個針對 Sendbird 自己場景的 MySQL 在線變更方案,有明顯的局限性。但其在變更性能上的加強以及斷點續傳能力確實解決了 gh-ost 最大的痛點。
原文:https://sendbird.com/developer/tutorials/sb-osc-sendbird-online-schema-change GitHub 倉庫: https://github.com/sendbird/sb-osc
💡 更多資訊,請關注 Bytebase 公號:Bytebase