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

相关文章

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

kkFileView在线预览office的常见问题以及解决方案

《kkFileView在线预览office的常见问题以及解决方案》kkFileView在线预览Office常见问题包括base64编码配置、Office组件安装、乱码处理及水印添加,解决方案涉及版本适... 目录kkFileView在线预览office的常见问题1.base642.提示找不到OFFICE组件

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND