iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
Software Development

TiDB學習筆記系列 第 23

Day23 - Online DDL

以往使用MySQL遇到要執行ddl語法的時候,為了不影響線上運作,會使用工具來執行。
比較常聽到的使用工具就是pt-osc以及gh-ost。

pt-osc的概念是是透過trigger在舊表與新表間執行ddl。

#新增test_table_new,開始同步新表
test_table >>>> test_table_new
#完成後 rename表格
test_table >>>> test_table_old
test_table_new >>>> test_table

gh-ost則是將自己模擬成一個slave的角色,從原本的slave機器上搜集binlog然後再回到master的新表執行,等到新舊表資料同步,再做rename的動作。這裡的rename是可以自己安排時間手動執行的。
https://ithelp.ithome.com.tw/upload/images/20210917/20113220jOV8VxZGam.png

引用https://github.com/github/gh-ost

#產生兩個新表
create table _test_table_gho, _test_table_ghc
#在新表執行ddl,以新增欄位為例
Alter table _test_table_gho add column new_id int
#儲存執行過程的資訊到_ghc
| 257 | 2021-09-17 01:24:43 | copy iteration 0 at 1631841883   | Copy: 0/157320 0.0%; Applied: 0; Backlog: 0/1000; Time: 12s(total), 0s(copy); streamer: mysql-bin.000024:195063441; Lag: 0.01s, HeartbeatLag: 0.01s, State: migrating; ETA: N/A                     |
| 258 | 2021-09-17 01:24:44 | copy iteration 0 at 1631841884   | Copy: 0/157320 0.0%; Applied: 0; Backlog: 0/1000; Time: 13s(total), 1s(copy); streamer: mysql-bin.000024:195067599; Lag: 0.01s, HeartbeatLag: 0.02s, State: migrating; ETA: N/A
#資料同步後,轉換新舊表
Alter table table_test rename to _table_test_del
Alter table _table_test_gho rename to table_test

而前面提到的工具DM,也可以在設定上開啟允許online ddl的參數。滿足在做資料搬移的同時,也可以執行ddl語法。

online-ddl: true

如果是執行gh-ost,DM只會在執行到最後一個步驟Alter table _table_test_gho rename to table_test 的時候,將語法轉換成 Alter table table_test add column new_id int,也就是將原本對新表執行的ddl語法,改成直接對舊表ddl,其他的語法通通省略不做。

執行pt-osc也是一樣,DM會自動無視過程中建立新表以及建立trigger等,只會等到最後要rename table_test_new to table_test時改為 Alter table table_test add column new_id int。


上一篇
D22 - Grafana Monitor
下一篇
D24 - Transaction
系列文
TiDB學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言