🎀gh-ost工具介绍及使用
💖简介
gh-ost
是一款由GitHub
开发的在线DDL
(Online Data Definition Language
)变更工具,专门用于MySQL
数据库。它允许在不锁定表的情况下执行数据库模式变更,从而避免了传统ALTER TABLE
命令可能带来的长时间锁表问题,这对于高可用性要求严格的生产环境尤为重要。
它通过无触发器(trigger-less
)的方式实现表结构变更,减少了对数据库性能的影响,同时支持暂停、限速、动态配置等功能。相较于传统的 pt-online-schema-change
,gh-ost
更安全、灵活,且对主库负载更低。
📖主要特点
-
无锁表操作:与传统的
ALTER TABLE
不同,gh-ost
不会长时间锁表,使得在生产环境中进行DDL
变更更加安全。 -
基于复制的迁移:
gh-ost
通过从库读取二进制日志来应用变更,这减少了对主库的压力。 -
灵活的控制方式:支持动态调整速率限制、暂停/恢复操作等。
-
模拟和预检查功能:提供
dry-run
选项用于测试变更效果,以及pre-flight
checks
确保操作的安全性。 -
易于使用:虽然功能强大,但相对简单易用,适合
DBA
和技术人员快速上手。 -
无触发器设计:不依赖数据库触发器,而是通过解析
MySQL
的binlog
来同步数据变更,减少主库负载和潜在锁冲突。 -
多种运行模式:可连接到主库(
master
)或副本库(replica
),根据需求选择不同迁移策略。
⭐安装方法
🌟下载二进制文件
从 GitHub
仓库下载对应平台的二进制文件:
https://github.com/github/gh-ost/releases
🌟赋予执行权限
chmod +x gh-ost
⚡基本使用
🔥命令格式
gh-ost \ --host=<主库地址> \ --port=<主库端口> \ --user=<用户名> \ --password=<密码> \ --database=<数据库名> \ --table=<表名> \ --alter="<DDL语句>" \ --execute
🔥关键参数说明
参数 | 说明 |
---|---|
--alter |
需要执行的 DDL 语句(如 ADD COLUMN ,DROP INDEX 等) |
--execute |
实际执行迁移(默认是 dry-run 模式) |
--allow-on-master |
允许直接连接主库(默认连接到副本库) |
--max-load=<metrics> |
设置负载阈值(如 Threads_running=50 ) |
--chunk-size=<rows> |
每次迁移的数据块大小(默认 1000) |
--critical-load=<metrics> |
负载超限时终止操作 |
--switch-to-rbr |
自动将副本库的 binlog 格式改为 ROW |
--postpone-cut-over-flag-file=<path> |
通过文件控制是否延迟切换表 |
--throttle-control-replicas |
指定需要监控的副本库列表 |
--tmpdir |
指定临时文件目录 |
🔥使用示例
- 添加新列
gh-ost \ --host=127.0.0.1 \ --port=3306 \ --user=admin \ --password=secret \ --database=mydb \ --table=orders \ --alter="ADD COLUMN comment VARCHAR(255)" \ --execute
- 修改字段类型
gh-ost \ --alter="MODIFY COLUMN amount DECIMAL(10,2)" \ --host=127.0.0.1 \ --execute
- 添加索引
gh-ost \ --alter="ADD INDEX idx_created_at (created_at)" \ --host=127.0.0.1 \ --execute
- 切换主库
在主库故障转移时,支持动态切换:
gh-ost \ --assume-master-host=<new_master_host:port> \ --execute
💥注意事项
-
权限要求
- 需要 SUPER、REPLICATION SLAVE、REPLICATION CLIENT 权限。
- 对原表和临时表有 CREATE、DELETE、ALTER 权限。
-
主键必须存在
目标表必须包含主键或唯一索引。 -
外键和触发器
gh-ost 不支持有外键约束或触发器的表。 -
大表操作
超大表迁移时需关注磁盘空间(临时表会占用额外空间)和网络负载。
结束
本文作者:丿似锦
本文链接:https://www.cnblogs.com/zktww/p/18698921
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步