目前主流的 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 的性能比较