Gh-ost让MySQL在线表结构变更不再是难题

2024-06-10 09:04

本文主要是介绍Gh-ost让MySQL在线表结构变更不再是难题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Gh-ost:无缝迁移,效率与安全并行- 精选真开源,释放新价值。

image

概览

gh-ost是由GitHub团队精心打造的在线MySQL表结构迁移工具,它以一种无需触发器的方式,实现了对数据库表结构变更的在线操作。gh-ost的设计初衷是解决现有工具在使用过程中可能遇到的限制和风险,通过利用MySQL的二进制日志流捕捉表变更,异步地将变更应用到一个“幽灵”表上,从而实现了真正的在线迁移。它不仅减轻了主服务器在迁移过程中的负载,还提供了暂停、动态控制/重新配置、审计和许多其他操作优势。

gh-ost 放弃了触发器,使用 binlog 来同步。gh-ost 作为一个伪装的备库,可以从主库/备库上拉取 binlog,过滤之后重新应用到主库上去,相当于主库上的增量操作通过 binlog 又应用回主库本身,不过是应用在幽灵表上。

gh-ost 首先连接到主库上,根据 alter 语句创建幽灵表,然后作为一个”备库“连接到其中一个真正的备库上,一边在主库上拷贝已有的数据到幽灵表,一边从备库上拉取增量数据的 binlog,然后不断的把 binlog 应用回主库。图中 cut-over 是最后一步,锁住主库的源表,等待 binlog 应用完毕,然后替换 gh-ost 表为源表。gh-ost 在执行中,会在原本的 binlog event 里面增加以下 hint 和心跳包,用来控制整个流程的进度,检测状态等。这种架构带来诸多好处,例如:

  • 整个流程异步执行,对于源表的增量数据操作没有额外的开销,高峰期变更业务对性能影响小。

  • 降低写压力,触发器操作都在一个事务内,gh-ost 应用 binlog 是另外一个连接在做。

  • 可停止,binlog 有位点记录,如果变更过程发现主库性能受影响,可以立刻停止拉binlog,停止应用 binlog,稳定之后继续应用。

  • 可测试,gh-ost 提供了测试功能,可以连接到一个备库上直接做 Online DDL,在备库上观察变更结果是否正确,再对主库操作,心里更有底。


主要功能

你可以进入该地址下载:https://github.com/github/gh-ost/releases/tag/v1.1.6

image

  • 无需触发器的迁移

gh-ost摒弃了传统迁移工具依赖的触发器机制,通过直接监听MySQL的二进制日志来捕获数据变更,避免了触发器可能带来的性能问题和复杂性。

  • 测试与验证

gh-ost提供了在副本上进行测试迁移的能力,允许用户在不影响生产环境的情况下验证迁移流程的正确性,确保迁移操作的安全性和可靠性。

  • 实时暂停与恢复

在迁移过程中,gh-ost允许用户实时暂停和恢复迁移过程,这为处理紧急情况或优化迁移窗口提供了极大的灵活性。

  • 动态配置调整

用户可以在迁移过程中动态调整gh-ost的配置,例如调整复制速率或修改其他参数,以适应不同的迁移需求和环境。

  • 详尽的状态审计

gh-ost提供了详细的状态查询功能,用户可以通过查询接口获取迁移的当前状态,包括进度、复制延迟等关键信息。

  • 关键步骤控制

gh-ost允许用户控制表交换的时机,即在迁移的最后阶段,用户可以选择在最佳时机执行表的替换,以减少对业务的影响。

  • 环境集成

gh-ost支持外部钩子,可以与用户的特定环境或运维流程集成,提供定制化的迁移体验。

  • 多模式迁移

gh-ost支持多种迁移模式,包括在主服务器上直接进行迁移,或在副本上进行迁移后同步到主服务器,以适应不同的数据库架构和业务需求。


信息

截至发稿概况如下:

  • 软件地址:https://github.com/github/gh-ost

  • 软件协议:MIT

  • 编程语言

语言占比
Go93.5%
Shell6.5%
  • 收藏数量:12.1K

gh-ost以其创新的在线迁移技术,为数据库管理员提供了一种安全、可控且高效的工具,以应对日益复杂的数据库结构变更需求。然而,任何工具都不是万能的,gh-ost在实际应用中可能会遇到特定的挑战,例如在处理大规模数据迁移时的性能问题,或是与特定数据库配置的兼容性问题。

各位在使用 Gh-ost 的过程中是否发现了什么问题?或者对 Gh-ost 的功能有什么提议?热烈欢迎各位在评论区分享交流心得与见解!!!


声明:本文为辣码甄源原创,转载请标注"辣码甄源原创首发"并附带原文链接。

这篇关于Gh-ost让MySQL在线表结构变更不再是难题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1047731

相关文章

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

MySQL的ALTER TABLE命令的使用解读

《MySQL的ALTERTABLE命令的使用解读》:本文主要介绍MySQL的ALTERTABLE命令的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、查看所建表的编China编程码格式2、修改表的编码格式3、修改列队数据类型4、添加列5、修改列的位置5.1、把列

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

MySQL 安装配置超完整教程

《MySQL安装配置超完整教程》MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典MySQLAB公司开发,目前属于Oracle公司旗下产品,:本文主要介绍MySQL安装配置... 目录一、mysql 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL5.1

MySQL 添加索引5种方式示例详解(实用sql代码)

《MySQL添加索引5种方式示例详解(实用sql代码)》在MySQL数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中,下面给大家分享MySQL添加索引5种方式示例详解(实用sql代码),... 在mysql数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中。索引可以在创建表时定义,也可

Mybatis Plus JSqlParser解析sql语句及JSqlParser安装步骤

《MybatisPlusJSqlParser解析sql语句及JSqlParser安装步骤》JSqlParser是一个用于解析SQL语句的Java库,它可以将SQL语句解析为一个Java对象树,允许... 目录【一】jsqlParser 是什么【二】JSqlParser 的安装步骤【三】使用场景【1】sql语

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创