Mysql在线安全变更工具 gh-ost

2024-09-06 13:36

本文主要是介绍Mysql在线安全变更工具 gh-ost,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

gh-ost(GitHub Online Schema Translater)是一个用于安全地进行 MySQL 数据库表结构变更的工具,专门为在线数据库迁移而设计。它的主要优点是可以在不中断业务的情况下,不影响数据库的可用性和性能,进行表结构的修改。

主要特点

  1. 在线迁移gh-ost 允许在高负载的生产环境中进行表结构的更改,而不需要锁定表,确保数据库的可用性。

  2. 渐进式复制:通过逐步复制行,gh-ost 可以在针对大量数据的情况下,避免短时间内的负载高峰。

  3. 安全性:它具备自动回滚功能,如果迁移过程中出现问题,可以安全地回滚到原始状态。

  4. 编程和操作简便:工具使用简单、直观,与 MySQL 客户端兼容,支持使用 SQL 语句进行表结构的更改。

  5. 多种配置选项:支持多种选项用于配置操作,例如并行迁移、最大移动速度等。

使用场景

  • 发布新字段:添加新的列而不影响应用的访问。
  • 修改现有字段类型:安全地改变列的数据类型,比如从 VARCHARTEXT
  • 重命名列:而不影响运行中的系统。

基本用法

  1. 安装:可以通过 github 下载可执行文件,或使用 Homebrew(在 macOS 上)进行安装。

    brew install gh-ost
    
  2. 基本命令
    以下是一个使用 gh-ost 进行表结构变更的基本示例:

    gh-ost \
    --max-load=Threads_running=25 \
    --critical-load=Threads_running=1000 \
    --host=127.0.0.1 \
    --user=username \
    --password=your_password \
    --database=your_database \
    --table=your_table \
    --alter="ADD COLUMN new_col INT DEFAULT 0" \
    --execute
    

    这个命令将向 your_table 表中添加一个名为 new_col 的新列,字段类型为 INT,默认值为 0。

配置选项

  • --max-load:指定允许的最大负载。
  • --critical-load:指定触发回滚的负载。
  • --host--user--password:数据库连接信息。
  • --database--table:要修改的数据库和表名。
  • --alter:指定 ALTER 语句。
  • --execute:表示执行迁移;如果不加这个选项,则只进行干运行(dry run),不实际执行。

gh-ost 数据迁移流程

1. 准备与初始化
  • 安装与配置:确保你的 MySQL 数据库已启用二进制日志(binlog),并安装 gh-ost 工具。
  • 参数设置:使用合适的参数启动 gh-ost,包括连接信息、要迁移的表、变更语句等。
2. 创建临时表
  • 临时表的结构gh-ost 首先会创建一个新的临时表,并按照你的 ALTER 语句的定义,将原有表的结构复制到临时表中
  • 开始复制数据:临时表一旦创建,gh-ost 即可开始将原始表中的现有数据逐行复制到临时表中。
3. 数据复制与变更监控
  • 逐行复制gh-ost 以增量的方式逐行将原始表的数据复制到临时表,这个复制过程是渐进的,确保了对数据库的负载最低。

  • 使用事务隔离:在数据复制的过程中,gh-ost 使用 REPEATABLE READ 事务隔离级别。这意味着在数据复制期间,原始表的读取是一个快照,不会受到其他事务的影响。

  • 监控二进制日志(binlog)

    • 同时,gh-ost 启动一个线程,实时监控 MySQL 的 binlog,捕获所有对原始表的变更(包括 INSERT、UPDATE、DELETE)。
    • 这允许 gh-ost 捕获到在数据复制过程中对原始表的任何更新。
4. 实时同步变更
  • 处理变更

    • 任何在数据复制过程中对原始表的变更(例如:INSERT 或 UPDATE)都会被 gh-ost 监控到并记录在 binlog 中。
    • gh-ost 会将这些变化实时应用到临时表中(不会等到复制完成后,再处理变更数据),确保临时表里的数据与原始表保持同步。
  • 最终更新操作

    • 对于原始表的更新操作,如果在复制到某一行时,该行数据已经被修改,gh-ost 将依赖于二进制日志来更新临时表,以阻止出现数据不一致的情况。
5. 表切换
  • 完成复制与更新

    • 一旦所有的数据都已复制,并且所有的二进制日志变更均已同步到临时表,gh-ost 将进行最后的检查。
  • 原子重命名

    • gh-ost 进行原子操作,将原始表重命名为备份名称(例如:your_table_old),然后将临时表重命名为原始表的名称(例如:your_table)。
    • 这一过程确保在任何时刻,数据库中的数据都是一致的,并且整个迁移操作对外界是透明的。
6. 清理与回滚
  • 删除旧表:如果配置允许,gh-ost 可以安全删除旧表,以释放资源。
  • 回滚机制
    • 如果在迁移过程中发生错误,gh-ost 会提供回滚功能,能够安全地将数据库恢复到原始状态,从而确保错误不会影响数据库的运作和数据的完整性。

总结

gh-ost 通过以上步骤实现了在线、安全、逐渐的 MySQL 数据迁移。其设计保证了在整个过程中,数据的一致性和准确性,以及对生产系统的影响最小。利用事务隔离和二进制日志捕获gh-ost 确保所有变更都在迁移过程中得以有效处理,最终实现平滑的表结构更新。

这篇关于Mysql在线安全变更工具 gh-ost的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142148

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

电力系统中的A类在线监测装置—APView400

随着电力系统的日益复杂和人们对电能质量要求的提高,电能质量在线监测装置在电力系统中得到广泛应用。目前,市场上的在线监测装置主要分为A类和B类两种类型,A类和B类在线监测装置主要区别在于应用场景、技术参数、通讯协议和扩展性。选择时应根据实际需求和应用场景综合考虑,并定期维护和校准。电能质量在线监测装置是用于实时监测电力系统中的电能质量参数的设备。 APView400电能质量A类在线监测装置以其多核

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。