Mysql Online DDL 和 pt-ost 、gh-ost 简要

Mysql Online DDL 和 pt-ost 、gh-ost 简要,第1张

在 Mysql 5.6 之前版本中 , 如果要修改一个表的ddl信息 ,需要锁表 。

具体步骤如下:

下面是Mysql官方文档对于DDL *** 作的总结:

http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html

http://dev.mysql.com/doc/refman/5.7/en/innodb-create-index-overview.html

可以使用 Alter 语句支持 DDL 特性 ,比如可以用 LOCK = NONE 无锁变更。

percona是一个开源产品 , 是管理Mysql的工具。

PT-OSC(Percona Toolkit Online Schema Change)

https://www.percona.com/doc/percona-toolkit/3.0/pt-online-schema-change.html

Percona Toolkit 包含很多 mysql 管理的功能 ,现在要说的是 online-schema-change上

PT-OSC 原理是建表 ,使用触发器同步数据 ,然后原子性rename。

这样可以支持在线无锁,不停机Online-DDL 。

具体步骤如下:

Percona 有一些限制和缺陷 ,根据它的原理 ,原表不能存在触发器 ,这玩意是唯一。另外原表必须存在PK或者UK。另外就是触发器的问题了,触发器带来性能开销,并且无法停止,那我就不能控制我同步的开关和速度。

但是gh-ost说它可以。

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

go-ost基于bin-log同步 , 基于binlog肯定都是伪装成一个replica。

由于使用单线程回放binlog来替换触发器,所以增量DML回放效率不如触发器,因为pt-osc的增量回放并发度是与业务DML并发度相同的,是多线程的。

相对于percona的优势是:

因为出的太晚了 ,然后percona 和 gh-ost等等开源产品已经大规模实践了,Mysql就更加没什么实践案例和经验了,大家就不太愿意尝试或者迁移了。

大厂来说基本上都是平台封装了,类似idb ,会把无锁变更细节屏蔽了,只需要提工单就可以了 ,但是底层基本上也是建表同步rename个思路。

小公司的话,可以使用percona 、 go-ost 等工具。

MySQL 8.0 Online DDL和pt-osc、gh-ost深度对比分析

Mysql Online DDL

pt-online-schema-change

gh-ost

MySQL5.6在线表结构变更(online ddl)总结

看过这些文章:

http://blog.gerryyang.com/mysql/2018/09/28/mysql-online-ddl.html

https://juejin.cn/post/6854573213167386637

https://zhuanlan.zhihu.com/p/115277009

文章之后,我觉得 mysql 5.x 的 online ddl 只是在 prepare 阶段、commit 阶段会有写锁,但是在真正执行的阶段都是读锁,不会阻塞读写。online ddl 过程如下:

1、拿 MDL 写锁

2、降级成 MDL 读锁

3、真正做 DDL

4、升级成 MDL 写锁

5、释放 MDL 锁。

1,2,4,5 阶段没有表冲突,执行时间非常短,只是第3阶段占用了 DDL 的绝大部分时间,这个期间表可以正常读写数据。

最后,还想说一点,通过 DBA 得知,8.0 加列只需要一秒,牛逼


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7679363.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存