type
status
date
slug
summary
tags
category
icon
password
GitHub's online schema migration for MySQL:
HOW?

- 建立一張和原表結構相同的
ghost表
- ALTER
ghost表
-
gh-ost偽裝成SLAVE從Master/Slave拉取binlog
將資料寫入 ghost 表
- 將
binlog event應用到ghost表
- 從原表複製
rows到ghost表
- 切換
ghost表和原表
上述的步驟中可以看出
Why triggerless?gh-ost 的大部分和其他online DDL 工具大體相同,唯一的不同處就是 gh-ost 不是基於 trigger 。 gh-ost 的開發團隊認為使用 trigger 有許多的限制與風險,可參照:取而代之的是
gh-ost 透過 binlog 來獲取原表資料的改動,並將之異步應用到 ghost 表。 gh-ost 承擔了其他工具留給 DATABASE 執行的任務(trigger),等於是完全分離了遷移資料時的寫Loading和 DATABASE 服務本身的 Loading,因此 gh-ost 可能更好的控制整個遷移的過程,可以做到真正的暫停。 Highlights
- No
trigger:這是gh-ost的特點,基於trigger的方案會對MySQL的性能造成較大的影響。gh-ost解析binlog後寫入數據,不僅可控對MySQL的性能影響也很小。
- 真正的暫停:當
gh-ost進入throttle狀態時,gh-ost真正停止了對MASTER的寫入(除了必要的低負載的心跳紀錄),讓MASTER可以回到原始的 Loading 狀態。
- 動態控制:即使已經開始運行
gh-ost,也可以透過交互式命令隨時重新配置gh-ost部分參數,甚至你可以強制讓gh-ost進入throttle狀態。
- 可審核:可以透過
unix socket、TCP或table _ghc查詢gh-ost狀態。
- 可測試:
gh-ost可以在SLAVE進行遷移,用以觀察 Loading 和 正確性後再投入使用。
- 控制切換階段:
cut over是gh-ost最關鍵的一個步驟,你可以隨時決定cut over的時間。
- 外部 hook:
gh-ost提供hook功能,例如:可以用於推送到SLACK群組告知進度。
如何運作
執行步驟解析 cut over 階段
Cut over要求與限制
要求與限制Shared key
Shared key參數
常用的參數如下:
其他參數可以參考:
參數.png?table=block&id=ba411412-b33e-43e5-8cb1-3dafd00bd3e5&t=ba411412-b33e-43e5-8cb1-3dafd00bd3e5&width=1080&cache=v2)
.png?table=block&id=1dbd2576-fccd-46f3-b43c-4c8cc278c5d9&t=1dbd2576-fccd-46f3-b43c-4c8cc278c5d9&width=1080&cache=v2)
.png?table=block&id=cbfe6738-d67e-40cf-9412-c68b419e1081&t=cbfe6738-d67e-40cf-9412-c68b419e1081&width=1080&cache=v2)
.png?table=block&id=1e750f89-3648-497e-84aa-cbeac8956b39&t=1e750f89-3648-497e-84aa-cbeac8956b39&width=1080&cache=v2)
.png?table=block&id=7fdc52df-19f6-4f25-823c-b60b33cce75c&t=7fdc52df-19f6-4f25-823c-b60b33cce75c&width=1080&cache=v2)
.png?table=block&id=eb0d22b2-eea6-4fb7-bfed-176a8efab6c1&t=eb0d22b2-eea6-4fb7-bfed-176a8efab6c1&width=1080&cache=v2)
.png?table=block&id=97320be0-12be-4389-89d4-998ff68f2fdd&t=97320be0-12be-4389-89d4-998ff68f2fdd&width=1080&cache=v2)
.png?table=block&id=9ad870ff-419b-47b3-a3ba-8378799bc501&t=9ad870ff-419b-47b3-a3ba-8378799bc501&width=1080&cache=v2)
.png?table=block&id=e1b87527-5e8b-4e9e-9fce-65a4c6e5f4b7&t=e1b87527-5e8b-4e9e-9fce-65a4c6e5f4b7&width=1080&cache=v2)
.png?table=block&id=e3377210-9d8e-42d2-9bff-65cd1e5e1781&t=e3377210-9d8e-42d2-9bff-65cd1e5e1781&width=1080&cache=v2)