gh-ost工具介绍及使用

💖简介

gh-ost 是一款由GitHub开发的在线DDLOnline Data Definition Language)变更工具,专门用于MySQL数据库。它允许在不锁定表的情况下执行数据库模式变更,从而避免了传统ALTER TABLE命令可能带来的长时间锁表问题,这对于高可用性要求严格的生产环境尤为重要。
它通过无触发器(trigger-less)的方式实现表结构变更,减少了对数据库性能的影响,同时支持暂停、限速、动态配置等功能。相较于传统的 pt-online-schema-changegh-ost 更安全、灵活,且对主库负载更低。

📖主要特点

  • 无锁表操作:与传统的ALTER TABLE不同,gh-ost不会长时间锁表,使得在生产环境中进行DDL变更更加安全。

  • 基于复制的迁移:gh-ost通过从库读取二进制日志来应用变更,这减少了对主库的压力。

  • 灵活的控制方式:支持动态调整速率限制、暂停/恢复操作等。

  • 模拟和预检查功能:提供dry-run选项用于测试变更效果,以及pre-flight checks确保操作的安全性。

  • 易于使用:虽然功能强大,但相对简单易用,适合DBA和技术人员快速上手。

  • 无触发器设计:不依赖数据库触发器,而是通过解析 MySQLbinlog 来同步数据变更,减少主库负载和潜在锁冲突。

  • 多种运行模式:可连接到主库(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 COLUMNDROP 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指定临时文件目录

🔥使用示例

  1. 添加新列
gh-ost \
  --host=127.0.0.1 \
  --port=3306 \
  --user=admin \
  --password=secret \
  --database=mydb \
  --table=orders \
  --alter="ADD COLUMN comment VARCHAR(255)" \
  --execute
  1. 修改字段类型
gh-ost \
  --alter="MODIFY COLUMN amount DECIMAL(10,2)" \
  --host=127.0.0.1 \
  --execute
  1. 添加索引
gh-ost \
  --alter="ADD INDEX idx_created_at (created_at)" \
  --host=127.0.0.1 \
  --execute
  1. 切换主库
    在主库故障转移时,支持动态切换:
gh-ost \
  --assume-master-host=<new_master_host:port> \
  --execute

💥注意事项

  • 权限要求

    • 需要 SUPER、REPLICATION SLAVE、REPLICATION CLIENT 权限。
    • 对原表和临时表有 CREATE、DELETE、ALTER 权限。
  • 主键必须存在
    目标表必须包含主键或唯一索引。

  • 外键和触发器
    gh-ost 不支持有外键约束或触发器的表。

  • 大表操作
    超大表迁移时需关注磁盘空间(临时表会占用额外空间)和网络负载。


结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丿似锦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值