在线DDL操作踩坑记录

news2024/9/21 16:23:44

官方地址:GitHub - github/gh-ost: GitHub's Online Schema-migration Tool for MySQL

使用ghost方式在线对mysql表进行ddl

ghost原理:

  1. 要对表A进行DDL,在主库建立一个ghost表 A1
  2. 在表A1上进行alter操作
  3. 伪装成一个mysql的从库,监听一个真正从库的binlog
  4. from 从库获取binlog(默认方式,尽量不影响主库),不断的把 binlog apply 回 ghost表上
  5. cut-over 是最后一步,锁住主库的源表,等待 binlog apply 完毕,然后替换 gh-ost 表为源表(这里有个秒级的阻塞,表不可用)。gh-ost 在执行中,会在原本的 binlog event 里面增加以下 hint 和心跳包,用来控制整个流程的进度,检测状态等。

注意事项:

1、DDL需要新建一张ghost表,如果表数据很大,需要提前考虑磁盘空间是否足够;

2、binlog apply到主库的ghost表中,注意限流,避免将资源占满,影响线上操作;

踩坑

1、对表进行ddl操作时,现在测试环境进行ddl操作,无问题

2、公司线上环境全球存在4个库,中国、美国、新加坡、日本,只有中国库中的A表进行了分片,其他库未分片,优先对海外3个库进行ddl操作,都无问题;

3、晚上对中国库中的表进行ddl操作,操作开始后,系统报错开始增多,查看日志发下是db proxy层报的错;错误显示 各分片中存在表字段不一致的请求;(分片库DDL,一个个分片进行DDL,必然会不一致啊,凌乱了。。。,这岂不是说分片库不能进行ddl操作,纳尼。。。)

4、拉起oncall,与dba一起进行分析,发现是db proxy层对请求进行了拦截处理,因为proxy在对分片数据进行聚合时,发现字段不一致,有的表新增了字段,有的表还没执行ddl;这符合预期啊

5、分析是sql存在select * from table ... 造成,select * 包含了新增字段,proxy层进行数据merge时,字段不一致,无法merge,直接报错给业务系统;

6、总共有101个分片,此时,部分分片表执行完了DDL,不分未执行DDL,停止执行DDL也无法使系统恢复,要么将已加的字段重新发起一个删除字段的DDL,要不继续执行,别无它法;我们选择让DDL继续执行,还好我们这里有容灾手段,相当于对该表进行了降级处理,并且此时为晚间业务低峰期;

综上:这个问题对于业务系统来说,是比较被动的,第一无法避免该问题,毕竟并不知道db proxy层会有这个策略;改进点:

1、db proxy对该种方式会拒绝,那么就应该阻止此类DDL的执行;

2、业务系统改造,对所有会生成select * 的语句都处理掉,必须select 具体字段,这样就不会应用上新字段;

3、db proxy扫描所有业务分片表的select语句,存在select * 的都应该改造,避免再出现此类问题;

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

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

相关文章

Java集合框架:队列、Queue和Deque详解

目录 一、普通队列 1. 概念 2. Queue(Java集合框架的接口) 3. Queue中的方法 4. 方法使用演示 5. 队列的模拟实现 6. 顺序普通队列的缺点: 二、循环队列 1. 循环队列也是一种数据结构。基于上述队列的缺点,此时就有了循环…

为什么我不建议你入行网络安全,因为99.9%的人都绕不过这三个坎

前言 我一个朋友老赵,老赵在一家大型互联网公司做高级网络安全工程师,从实习生到工程师整整呆了六年。去年他们公司为了缩减成本,做了裁员,他也在其中,取而代之的是一个只有三年工作经验的 “新人” … 老赵想着&…

Windows10下安装Oracle19c提示“无法将 **\** 安装用户添加到 ** 组“解决办法

问题描述 操作系统:window10 数据库版本:Oracle19c 本机在安装Oracle19c提示无法将 ZHOUQUAN\zhouquan 安装用户添加到 %2% 组。 问题原因 根据安装的对话框中的日志,找到并打开 日志报错信息: 信息: WindowsSecurityExcep…

时序预测 | Matlab实现INFO-ELM向量加权算法优化极限学习机时间序列预测

时序预测 | Matlab实现INFO-ELM向量加权算法优化极限学习机时间序列预测 目录 时序预测 | Matlab实现INFO-ELM向量加权算法优化极限学习机时间序列预测效果一览基本介绍程序设计学习总结参考资料 效果一览 基本介绍 Matlab实现INFO-ELM向量加权算法优化极限学习机时间序列预测 …

skywalking 源码

源码核心是SkyWalkingAgent 找到一堆插件,来对符合条件的类来代理 通过AbstractClassEnhancePluginDefine.define方法来。 如果有很多版本的插件,spring有2.0版本,3.0版本,4.0版。 具体使用哪个版本,看被增加的类使用的是哪个版本的spring …

vue基础--计算商品的总价格

计算商品的总价格: 1、在 父组件中 通过计算属性 动态把总价格计算出来, 2、通过 父向子传值,通过自定义属性,把值传给 子组件 父组件: 1、使用计算属性computed 计算总价格: 1.1、先用filter 过滤出 数…

Unity UGUI5——图集

一、Drawcall ​ 字面理解 DrawCall,就是绘制呼叫的意思,表示 CPU(中央处理器)通知 GPU(图形处理器-显卡) (一)DrawCall 概念 就是 CPU (处理器)准备好渲染…

基于Web的停车场管理系统(Java)

目录 一、系统介绍 1.开发的环境 2.本系统实现的功能 3.数据库用到的表 4.工程截图 二、系统展示 1、登录页面 2、首页 3、系统信息管理模块 4、车位信息管理模块 5、IC卡信息管理模块 ​编辑6、固定车主停车管理模块 7、临时车主停车管理模块 8、系统功能操作模块 …

unity3d:小地图UV,UGUIshader毒圈挖孔,缩圈

运行效果 场景中缩圈 小地图中挖孔 大地图中挖孔 小地图 方案1使用Mask 给了一个方形的mask组件,然后根据玩家位置计算出地图左下角的位置进行移动。这种实现方式虽然简单,但是会有两个问题: 1.Overdraw特别大,几乎很多时候会有…

【LLMs 入门实战 】Vicuna 模型学习与实战

UC伯克利学者联手CMU、斯坦福等,再次推出一个全新模型70亿/130亿参数的Vicuna,俗称「小羊驼」,小羊驼号称能达到GPT-4的90%性能。 欢迎使用小羊驼🦙环境搭建权重下载下载 Vicuna Weight下载 LLAMA Weight构建真正的 working weigh…

Lattice Planner从入门到放弃

Lattice Planner相关背景和更正式的公式推导可以直接参考其原始论文《Optimal Trajectory Generation for Dynamic Street Scenarios in a Frent Frame》(ICRA 2010),本文侧重于Lattic planner理论和代码的结合。 1. Lattice Planner基本流程…

2023年6月GESP能力等级认证C++一级真题

2023-06 GESP一级真题 题数:27 分数:100 测试时长:60min 一、选择题(每题 2 分,共 30 分) 1.以下不属于计算机输入设备的有 (B ) 。(2分) A、键盘 B、音箱 C、鼠标 D、传感器 答案解析&#xff1…

如果你正在做AI测试,那么这十点你必须注意

AI是一个已经进入人类日常生活的新技术时代,例如Siri,Alexa语音接口等。通过大数据和数据科学实现数据存储的进步,使用户能够进行快速分析和数据检索。机器学习是一个新领域,机 AI是一个已经进入人类日常生活的新技术时代&#x…

今天我们来说说MySQL的缓存机制

原文链接:http://www.ibearzmblog.com/#/technology/info?id5770c555acd4302f81d86976c06e2319 前言 当我们向数据库服务器发送一条SQL的时候,但数据库收到后就会执行,但是如果在短时间内都执行同一条SQL,如果每次数据库都会执…

CUDA和显卡驱动以及pytorch版本的对应关系

1 支持CUDA 的GPU 支持 CUDA 的 NVIDIA Quadro 和 NVIDIA RTX CUDA GPU | NVIDIA Developer您的 GPU 计算能力 您是否正在寻找 GPU 的计算能力然后查看以下表格。您可以在这里了解更多 计算能力 。 NVIDIA GPU 为全球数百万台台式机笔记本电脑工作站和超级计算机提供动力加速…

《计算机网络——自顶向下方法》精炼——4.4.3-4.4.5

学习是终身的职业。在学习的道路上,谁想停下来就要落伍。 文章目录 UPnP因特网控制报文协议(ICMP)IPv6IPv6数据报格式IPv4到IPv6的变革 UPnP 通用即插即用(UPnP)提供了一种让外部网络的主机与NAT内主机交换数据的方式…

六十分之十七———低头拉车后的抬头看路

目录 前言:一、目标二、计划三、完成情况四、提升改进(最少3点)五、意外之喜(最少2点)六、总结 前言: 距离上次的月总已经过去四个多月时间了,这段时间里又是一次阶段性的下沉和突破,于是也就有了现在的总结。 此时还想将自己17…

未来10年,网络安全人才就业的黄金期

随着大数据、物联网、人工智能等新技术的发展,信息技术与经济社会各领域的融合也更加深入。网络攻击行为日趋复杂、黑客攻击行为组织性更强、针对手机无线终端的网络攻击日趋严重,近几年有关网络攻击和数据泄露的新闻层出不穷。因此,随着国家…

Planning-oriented Autonomous Driving 解析

abstract 现代自动驾驶系统通常是模块化的序列任务,这种方式很容易造成累积误差和任务协调不足,因此设计一个端到端架构,从全局的视角出发为agent的交互提供互补的特征提取。 introduction (a) Most industrial solutions deploy separate …

【QQ界面展示-获取监听到的通知的具体内容 Objective-C语言】

一、获取监听到的通知的具体内容 1.刚才这个没说啊,给大家补充一下, 我们看一下,刚才我们只说了一个通知的发布、和移除吧, 刚才我们这里,只是说了一个通知的发布、和移除吧, 以及监听, 那么,大家有没有发现, 我们一开始,给大家介绍的时候,是不是有两个对象啊,…