🎀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-flightchecks确保操作的安全性。易于使用:虽然功能强大,但相对简单易用,适合
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 不支持有外键约束或触发器的表。大表操作
超大表迁移时需关注磁盘空间(临时表会占用额外空间)和网络负载。
结束
🎀gh-ost工具介绍及使用的更多相关文章
- 《连载 | 物联网框架ServerSuperIO教程》- 14.配制工具介绍,以及设备驱动、视图驱动、服务实例的挂载
注:ServerSuperIO二次开发套件授权码申请---截止到:2016-12-09 1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架Server ...
- json、javaBean、xml互转的几种工具介绍
json.javaBean.xml互转的几种工具介绍 转载至:http://blog.csdn.net/sdyy321/article/details/7024236 工作中经常要用到Json.Jav ...
- Linux性能工具介绍
l Linux性能工具介绍 p CPU高 p 磁盘I/O p 网络 p 内存 p 应用程序跟踪 l 操作系统与应用程序的关系比喻为“唇亡齿寒”一点不为过 l 应用程序的性能问题/功能问 ...
- Android APP压力测试(一)之Monkey工具介绍
Android APP压力测试(一) 之Monkey工具介绍 前言 本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动. ...
- Android系统性能调优工具介绍
http://blog.csdn.net/innost/article/details/9008691 经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优 ...
- 简要介绍Apache、php、mysql安装和工具介绍
1 安装Apache 网站:www.Apache.org下载相应的Apache,目前下载了近期的:httpd-2.2.15-win32-x86-openssl-0.9.8msi 安装简要步骤如下图: ...
- [原创]Java静态代码检查工具介绍
[原创]Java静态代码检查工具介绍 一 什么是静态代码检查? 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法.结构.过程.接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数 ...
- RUF MVC5 Repositories Framework Generator代码生成工具介绍和使用
RUF MVC5 Repositories Framework Generator代码生成工具介绍和使用 功能介绍 这个项目经过了大半年的持续更新到目前的阶段基本稳定 所有源代码都是开源的,在gith ...
- 用户管理 之 Linux 用户管理工具介绍
Linux是一个多用户的操作系统,她有完美的用户管理工具,这些工具包括用户的查询.添加.修改,以及用户之间相互切换的工具等:通过这些工具,我们能安全.轻松的完成用户管理: 在这里我们要引入用户控制工具 ...
- 【转帖】四种BI 开源工具介绍-SpagoBI,openI,JasperSoft,Pentaho
四种BI 开源工具介绍-SpagoBI,openI,JasperSoft,Pentaho 1 BI系统的简述 从技术角度来说 BI 包含了 ETL.DW.OLAP.DM等多环节.简单的说就是把交易系统 ...
随机推荐
- Golang sync.pool源码解析
Golang sync.pool源码解析 - sync.pool - 是什么 - 怎么用 - demo - 真实世界的使用 - 源码解读-数据结构 - 源码解读-读写流程 - 写流程 - 读流程 - ...
- TCP协议的三次握手-4次挥手
TCP的连接建立是一个三次握手过程,目的是为了通信双方确认开始序号,以便后续通信的有序进行.主要步骤如下: 连接开始时,连接建立方(Client)发送SYN包,并包含了自己的初始序号a: 连接接受方( ...
- Idea报错 【cannot access com.xxx】的【解决办法】
正常操作代码,一个类突然标红,提示 cannot access com.xxx . 执行下面操作,执行完后项目变为正常 但是如果是你代码存在异常,可不是清缓存就能解决了,就要靠自己了哈哈 第一步Fil ...
- Hive源码解析环境搭建
一.准备工作 1.1 下载地址 https://github.com/apache/hive https://dlcdn.apache.org/hive/ 版本:2.3.9 1.2 环境依赖 had ...
- swiper8.x在vue中的wtf
首先我是想开启鼠标滚动的效果,在官网上发现如下说法 引入就引入吧,引入路径还不说,在网上看其他教程发现路径是 引入完了,怎么办呢,又不会了,官网没有教程,网上的教程全是关于vue-awesome-sw ...
- QT5笔记: 19. QFileSystemModel 联动 QListView QTableView QTreeView
Model 指的是数据 View 指的是界面,View不用设置,只需要和Model进行绑定,绑定完成之后就是Model的格式了 例子:*本例子中QListView QTableView QTreeVi ...
- mybatis - [12] 日志工厂
题记部分 001 || 日志工厂 如果一个数据库操作出现了异常,需要通过日志定位问题. 002 || Log4j Log4j是Apache的一个开源项目,通过使用Log4j,可以控制日志信息输送的目的 ...
- Spark - [03] 资源调度模式
题记部分 一.Local模式 1.1.概述 Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试的. 可以通过以下几种方式设置Master (1)local:所欲计算都运行在一个 ...
- win - [01] 修改网络连接名称(网络1、网络2...网络10)
修改网络连接的名称 1.打开运行窗口:Windows 键 + R 2.在运行窗口输入 regedit,打开注册表编辑器 3.在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsof ...
- Processing中获取表格数据( .tsv\.csv )的经验分享
在日常收集数据的需求中,会有很多场合用到表格数据类型,如.tsv和.csv,一来高效查看和编辑,二来数据条理清晰,导入数据结构方便.在Prcocessing中帮我预留好了loadTable().loa ...