Mysql online DDL工具:gh-ost

news2025/4/5 18:22:09

gh-ost特点:

1、不使用触发器。
在gh-ost出现之前第三方MySQL DDL工具均采用触发器的方式进行实现,包括前面percona的pt-osc,Facebook的OSC等等。而gh-ost采用的机制和他们完全不同:它通过MySQL binlog来同步数据。
gh-ost会伪装成一个从库节点,读取数据库(可能是集群中的主节点或者从节点)的binlog,并实时解析,将变更表的所有DML操作都重新运用到影子表上面。
因此对于发布期间变更表上发生的DML操作,可以完全避免由于触发器而产生的性能开销,以及锁的争抢。
2、动态控制。
之前通过pt-osc发布时,命令执行后参数就没法修改,除非停止重来。假设发布进行到90%,突然由于其他各种原因导致服务器负载上升,为不影响业务,只能选择将发布停掉,等性能恢复再重来。
通过pt-osc发布的表都是很大的表,耗时较长,所以遇到这类场景很尴尬。因此发布中参数如果可动态调控将变得非常重要。
gh-ost另外实现了一个socket server,我们可以在发布过程中,通过socket和发布进程进行实时交互,它可以支持实时的暂停,恢复,以及很多参数的动态调整,来适应外界变化。

总结gh-ost工作原理:

先生成一个镜像表(影子表),在镜像表上执行DDL语句;从源表中拷贝数据到镜像表;依据 Binlog 信息完成增量数据的变更。最后用镜像表替换源表。
整个 Online DDL 操作仅在最终 rename 源表与镜像表时会阻塞几秒钟的读写。

扩展:

gh-ost 发音和ghost一样,其实单词也是一样哈哈。

安装:

去这里寻找下载的版本:https://github.com/github/gh-ost/tags
wget -c 下载地址(注意选择amd64版本的,我一开始不小心选择了arm64版本导致无法执行命令)
tar -zxvf 下载的文件
然后就可以执行:./gh-ost --help

在这里插入图片描述

命令:

./gh-ost -max-load=Threads_running=20
-critical-load=Threads_running=100
-chunk-size=2000 -user=“root” -password=“swl123” -host=127.0.0.1
-allow-on-master -database=“coupang” -table=“cp_orders”
-alter=“alter table cp_orders change order_status or_status tinyint(2)” -cut-over=default
-exact-rowcount -concurrent-rowcount -default-retries=120
-timestamp-old-table -panic-flag-file=/tmp/ghost.panic.flag
-approve-renamed-columns
-switch-to-rbr
-execute

注意:

  • -alert就是具体修改表的DDL语句。
  • binlog格式必须得设置为row才可以。可以先把数据库的binlog格式设置为row:SET GLOBAL
    binlog_format=ROW。

项目地址:

https://github.com/github/gh-ost

参考文章:

https://github.com/github/gh-ost/blob/master/doc/cheatsheet.md
https://www.cnblogs.com/zhoujinyi/p/9187421.html
https://www.cnblogs.com/zping/p/8876148.html
https://mp.weixin.qq.com/s?__biz=MzU1Mzk5NTA3NA==&mid=2247487808&idx=1&sn=b5cf612d2821be954cb0b75d9a194065&chksm=fbeb0f6dcc9c867bf7fcb7b751c9ee5886c9ba02b5cdb24224d892231249ff23da5ef1aecff5&scene=178&cur_album_id=2038342119441924096#rd

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PowerToys 微软效率工具包 使用指南

PowerToys 微软效率工具包 使用教程 Microsoft PowerToys 是一组实用程序,供高级用户调整和简化其 Windows 10 和 11 体验以提高工作效率。 下载 PowerToys⇲ 安装教程 1.双击文件运行 点击我同意 2.等待下载安装完成 3.安装完成 使用指南 Always on Top 通…

FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D)

本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。 双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件 分别安装MotiveBody与MotionVenus并校准人体与数据…

Kafka-Topic创建源码分析

Kafka-Topic创建源码分析 在kafka中,创建topic通过使用kafka-topics.sh脚本或者直接调用AdminClient对外提供的adminApi来进行创建. 即使是使用kafka-topics.sh,其最终会通过生成并调用AdminClient来进行处理. 0,创建topic流程图 1,创建topic示例代码 通过引入A…

工作两年半,终于学会了Jenkins部署Maven项目

上期我们讲了Linux部署Jenkins Linux安装Jenkins(Java11最新版) 这期我们来讲的是使用Jenkins部署一个maven项目 文章目录👮所需要的环境(必须要有,否则不能进行下一步)🙋第一步,安装…

02 运算符

目录 第一章:概述 第二章:算术运算符 2.1 概述 2.2 应用示例 2.3 号的两种用法 2.4 自增自减运算 2.4.1 概述 2.4.2 单独使用 2.4.3 复合使用 第三章:赋值运算符 3.1 概述 3.2 应用示例 第四章:关系运算符&#xff0…

vue3.0找不到模块“./App.vue”或其相应的类型声明

vue3报错提示 找不到模块“/App.vue”或其相应的类型声明 情况一、vue3.0js 报错原因:javascript只能理解.js文件,无法理解.vue文件。 解决方案:根目录新建jsconfig.json {"compilerOptions": {"baseUrl": "./&qu…

被取消的AP考试到底是什么嘞?

最近,好多考试都延期或取消了,美国大学理事会(College Board)也发布公告,宣布受疫情影响,上海、北京等地的AP考试正式取消,不提供线上考试的机会,而且不会安排后续补考。 这条消息惊…

芯片漫游指南(5)-- UVM寄存器

目录1.寄存器模型概览1.1 概述1.2 uvm_reg相关概念1.3 MCDF寄存器模型1.4 寄存器建模1.5 模型使用流程2.寄存器模型集成2.1 总线UVC的实现2.2 纵向UVC的示例3.寄存器模型的常规方法3.1 mirror、desired和actual value3.2 prediction的分类3.3 uvm_reg的访问方法3.4 mem与reg的联…

python扩展实现方法--python与c混和编程

大部分的Python的扩展都是用C语言写的,但也很容易移植到C中。 一般来说,所有能被整合或者导入到其它python脚本的代码,都可以称为扩展。 扩展可以用纯Python来写,也可以用C或者C之类的编译型的语言来扩展。 就算是相同的架构的两…

Spring Boot学习篇(三)之通用mapper的使用(oracle版)

Spring Boot学习篇(三)之通用mapper的使用(oracle版) 1 配置pom.xml <parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.7.2</version></parent> <de…

概念辨析|电子文件单轨制与电子档案单套制

电子文件单轨制和电子档案单套制是档案业务中的重要概念&#xff0c;在建设数字中国的时代背景下&#xff0c;厘清“套”与“轨”的区别和联系是革新档案工作的基础 产生背景 随着信息技术的不断发展和政务信息化的持续推进&#xff0c;电子文件逐渐在业务工作中大量出现&…

从工具到实践:如何在GitHub上保障开源项目安全?

1998年&#xff0c;Christine Peterson创造了 “开源软件”这个词。她解释道&#xff1a;“这是刻意为之&#xff0c;为了让其他人更容易理解这个领域”。同年&#xff0c;O’Reilly组织了首届“开源峰会”。 开源软件受到更多人青睐原因在于&#xff0c;用户对软件拥有更多的…

【圣诞节】简单代码实现圣诞树|圣诞贺卡 | 快来为心爱的她送上专属的圣诞礼物叭~

圣诞节马上就要到了&#xff0c;不知道给自己喜欢的人准备什么样的惊喜吗&#xff1f;作为一名程序员&#xff0c;当然是用编程制作专属于她or他的圣诞树&#xff01; 目录 &#x1f384;圣诞树 ✨3D圣诞树 代码块 打开方式 修改位置 效果展示 ✨音乐律动圣诞树 代码块…

详解 Vue 过渡 transition 动画 animation 并结合第三方库 animation.css 和 gsap

transition vue过渡组件 标签自带类名 触发时机默认类名 自定义类名 <transition name"xxx"> 自定义行内式类名 方便结合第三方库 transition 钩子 接收参数el enter 和leave 第二个参数 done 可以 决定 after-enter after-leave 的 周期内的执行时机 v-…

YonBuilder移动开发平台 AVM框架 封装虚拟数字键盘组件

AVM&#xff08;Application-View-Model&#xff09;前端组件化开发模式基于标准Web Components组件化思想&#xff0c;提供包含虚拟DOM和Runtime的编程框架avm.js以及多端统一编译工具&#xff0c;完全兼容Web Components标准&#xff0c;同时兼容Vue和React语法糖编写代码&am…

Codeforces Round #697 (Div. 3) E. Advertising Agency

翻译&#xff1a; 玛莎在一家广告公司工作。为了推广新品牌&#xff0c;她想和一些博主签约。玛莎总共有&#x1d45b;个不同的博主。编号为&#x1d456;的博主拥有&#x1d44e;&#x1d456;名粉丝。 由于玛莎的预算有限&#xff0c;她只能与&#x1d458;不同的博主签约。…

LeetCode动态规划—跳跃游戏从跳到头到跳最少下跳到头(45、55)

跳跃游戏跳跃游戏跳跃游戏Ⅱ跳跃游戏 一个下标对应的值为3&#xff0c;那证明这个位置可以跳到前后3个位置的下标处。&#xff08;3均可达&#xff09; 如果依次遍历完这个数组&#xff0c;有下标在跳跃过程中最远位置仍然不可达&#xff0c;即证明无法到达最后一个位置。 可以…

js实现九宫格抽奖功能

分享一下js的九宫格抽奖功能 首先是html部分&#xff1a; <div class"box"><div class"div2">短裙</div><div class"div3">口红</div><div class"div4">草莓</div><div class"div…

【vue】控制台中如何移除数组arr中的值?如何给数组arr中放值?

移除数组arr属性中的值&#xff1a;vm.arr.shift() 新增数组arr属性中的值&#xff1a;vm.arr.push(‘属性值’) 移除atguigu3样式后效果&#xff1a; 向数组arr中添加样式值后效果&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta…

FlinkSql开窗实例:消费kafka写入文本

前言 以前写Flink从kafka入hdfs因为业务需求和老版本缘故都是自定义BucketSink入动态目录中&#xff0c;对于简单的需求可以直接用Flink SQL API进行输出。Flink版本1.13.1。 Flink官网示例 准备 本地下载个kafka&#xff08;单机即可&#xff09;&#xff0c;新建个桌面目…