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。


<<:  回顾 SOLID 设计原则

>>:  Day23 设定Alerts

【Day24】[演算法]-希尔排序法Shell Sort

希尔排序法(Shell Sort)是插入排序(Insertion Sort)的改良版。可减少插入排序...

IT 铁人赛 k8s 入门30天 -- day3 k8s 架构:k8s Node Compoents

前言 在理解完k8s基础元件後 接下来会从k8s的架构来介绍 k8s架构上, 大致上可以分为 Con...

Singleton 单例模式

首先,先来看看一个简单、特殊的创造物件的模式。 In software engineering, t...

Day18-13. Roman to Integer

今日题目:13. Roman to Integer(Easy) Roman numerals are...

集中心力在你能力所及之事,而非不舍於无法改变的事实。

集中心力在你能力所及之事,而非不舍於无法改变的事实。 Fix your eyes forward o...