前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spirit精神小伙 - 一款基于gh-ost原理的在线DDL工具

Spirit精神小伙 - 一款基于gh-ost原理的在线DDL工具

原创
作者头像
贺春旸的技术博客
发布2024-06-07 12:15:35
1400
发布2024-06-07 12:15:35
举报
文章被收录于专栏:DBA 平台和工具DBA 平台和工具

使用 pt-online-schema-change(基于触发器) 或 gh-ost(基于binlog)修改表结构?当然,MySQL DBA 都在使用。但现在有一种新的在线模式更改工具 - Spirit(翻译后:精神)

那么为了方便记忆,我们称之为Spirit精神小伙。

https://github.com/cashapp/spirit

Spirit是一款基于gh-ost原理的在线DDL工具,主要用于执行表结构修改(ALTER TABLE)操作。与gh-ost类似,Spirit也采用了"在线双写"的方式,创建一个新表,并使用多线程并发地从原表复制数据到新表,同时通过解析binlog获取原表增量数据,保持新旧表数据最终一致。

Spirit的设计思路和基本原理源于gh-ost,但在实现细节上作了一些优化和创新。

工作原理

创建表:创建一个临时表(_new),其结构与原始表相同。

复制表:多线程并发从原表查询数据批量插入到临时表(_new),例:INSERT IGNORE INTO `test`.`_sbtest2_new` (`id`, `k`, `c`, `pad`)

SELECT `id`, `k`, `c`, `pad` FROM `test`.`sbtest2` FORCE INDEX (PRIMARY) WHERE `id` >= 2001 AND `id` < 3001

增量复制:使用 binlog 事件将原始表的更改增量复制到新表中。

切换表:在完成所有数据复制后,通过原子性的 RENAME TABLE 操作将新表替换为原始表。

使用

代码语言:bash
复制
shell> ./spirit --host=127.0.0.1:3346 
--username=admin 
--password=123456 
--database=test 
--table=sbtest1 
--alter="modify pad varchar(300)" 
--threads=4
Spirit工具使用介绍
Spirit工具使用介绍

总结

  • Spirit性能是其主要卖点,通过并发复制和增量复制机制,可以高效地执行大表在线DDL,且不会导致过多锁等待。
  • 仅支持在MySQL 8.0+版本上使用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 工作原理
  • 使用
  • 总结
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档