首页 游戏 软件 资讯 排行榜 专题
首页
数据库
mysql从库执行DDL锁表怎么办_采用gh-ost或pt-osc工具同步

mysql从库执行DDL锁表怎么办_采用gh-ost或pt-osc工具同步

热心网友
51
转载
2026-04-30

从库执行DDL更易锁表?先别急着动手,搞清原理再操作

mysql从库执行DDL锁表怎么办_采用gh-ost或pt-osc工具同步

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

从库执行 DDL 为什么比主库更容易锁表

这事儿得从MySQL的复制机制说起。尤其是在MySQL 5.7及更早的版本里,从库的SQL线程默认是“单线程回放”模式。什么意思呢?就是它得老老实实、一个接一个地串行执行relay log里的事件。

问题就出在这儿。一旦这个队列里混进了一个需要全表扫描或重建表的ALTER TABLE这类DDL,整个复制流水线就被它一个人给“卡”住了。后续所有的更新、插入语句,甭管多急,都得在后面排队等着它完工。主库上可能只是“唰”一下的瞬间操作,到了从库这里,就可能演变成持续几分钟甚至几小时的漫长等待。

怎么判断是不是卡住了?执行show processlist,如果看到SQL线程的状态显示为altering table,同时用show open tables where in_use > 0命令又能看到对应表被占用,那基本就是它了。

gh-ost 和 pt-osc 到底解决的是哪个环节

这两个大名鼎鼎的在线表结构变更工具,它们解决的可不是“已经卡死的锁”,而是“如何从一开始就不去制造锁”。它们的核心思路,是把原生的、一把锁锁全表的DDL操作,拆解成一个“无锁增量迁移”的精细活:先新建一张影子表,然后一点点地把数据同步过去,期间持续追平主库的变更,最后来个原子切换,完成变更。

关键在于——整个过程,主库的写入不受任何阻塞,从库的复制也完全不用停。听起来很美好,对吧?但这里有几个关键的细节必须拎清楚:

  • 默认战场在主库:无论是gh-ost还是pt-online-schema-change,默认都是在主库上运行的。gh-ost通过监听主库的binlog来捕获变更;pt-osc也是类似。如果你非要在从库上跑,就得额外配置。比如gh-ost需要加上--recursion-method=none并手动指定--host,否则工具会自动探测拓扑并很可能报错。
  • 从库执行的限制gh-ost依赖BINLOG_FORMAT=ROW,并且如果要在从库场景下让它能读取到变更,从库必须开启log_sla ve_updates。而pt-osc在从库(只读)上执行时,创建触发器这步会失败,所以必须使用--no-drop-triggers--no-swap-tables的组合,让它只做数据拷贝,最终的切换需要人工介入。
  • 最重要的一点:它们都是“预防手段”,而不是“急救方案”。如果当前已经有一个DDL在从库上卡死了,这两个工具是束手无策的。

从库 DDL 卡死时,别急着 kill,先确认是否真能切走

遇到从库DDL卡住,很多人的第一反应就是去KILL掉那个线程。且慢!这个操作风险不小,贸然执行可能导致复制直接中断、relay log损坏,甚至出现Sla ve_SQL_Running: No的尴尬局面。

正确的处理姿势应该是这样的:

  • 第一步,诊断:先执行SHOW SLA VE STATUS\G,重点观察Seconds_Behind_Master(复制延迟)是否在持续增长,以及Exec_Master_Log_Pos(已执行的日志位置)是否长时间停滞不前。
  • 第二步,排查元凶:运行SELECT * FROM information_schema.innodb_trx ORDER BY trx_started LIMIT 1;,看看是不是有未提交的长事务(比如一个忘了提交的UPDATEDELETE)在背后阻塞了DDL。这种情况其实很常见。
  • 第三步,谨慎操作:如果确认就是DDL自身因磁盘I/O瓶颈或内存不足等原因卡住了,并且业务上可以接受短暂的复制延迟,那么可以考虑先STOP SLA VE;暂停复制,然后再KILL掉那个在SHOW PROCESSLIST中显示为Command=QueryState=altering table的线程。
  • 第四步,善后:在重启复制(START SLA VE;)之前,务必检查一下relay-log.info文件或GTID位置是否一致,避免不小心跳过了某些尚未执行的事件,造成数据不一致。

真正想在从库做 DDL 迁移?优先改用主库+工具+延迟从库策略

说实在的,在生产环境中,几乎找不到“必须专门在从库执行DDL”的强理由。一个更稳健、更通用的最佳实践是:将所有表结构变更,统一放在主库,使用gh-ostpt-osc这类工具来执行,然后让从库自然地通过复制链路同步过去

如果担心变更对主库性能有影响,可以配合一个“延迟从库”来玩。通过CHANGE REPLICATION SOURCE TO SOURCE_DELAY = 3600(MySQL 8.0语法)设置一个比如一小时的延迟。这样,你可以先在主库完成变更,然后在这个延迟从库上观察验证,确认无误后,再考虑在其他从库上操作(此时风险已经充分暴露和可控)。

强行在从库上运行在线DDL工具,往往会因为权限、binlog格式设置、复制过滤规则等各种细节问题而“翻车”,得不偿失。

最后补充一个容易被忽略的参数:无论使用哪个工具,都要注意innodb_lock_wait_timeout这个值的设置。如果把它设得太小(比如只有5秒),而工具内部操作又需要等待锁,就可能导致工具频繁地因锁等待超时而失败、重试,反而拖慢了整个变更的进度。

来源:https://www.php.cn/faq/2332878.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

怎样利用自动化审计工具发现SQL注入点_集成SonarQube安全插件
数据库
怎样利用自动化审计工具发现SQL注入点_集成SonarQube安全插件

怎样利用自动化审计工具发现SQL注入点:集成SonarQube安全插件 开门见山地说,很多团队把SonarQube当成了发现SQL注入的“银弹”,这其实是个误区。真相是:SonarQube本身并不能直接检测出那些在运行时才能被利用的SQL注入漏洞。它的核心能力,是识别源代码中那些“一眼就能看出危险”

热心网友
04.30
Navicat模型工具高级应用:怎样多图纸模型工作区协同_底层解析
数据库
Navicat模型工具高级应用:怎样多图纸模型工作区协同_底层解析

Na vicat 模型工作区:那些“理所当然”却容易踩坑的细节 在数据库设计过程中,Na vicat 的模型工作区( mwb文件)是个好帮手,能直观地规划表结构。但有些功能边界,可能和你想的不太一样。今天就来聊聊几个常见的理解误区和使用痛点。 Na vicat 模型工作区里多个 mwb 文件能直接

热心网友
04.30
mysql从库执行DDL锁表怎么办_采用gh-ost或pt-osc工具同步
数据库
mysql从库执行DDL锁表怎么办_采用gh-ost或pt-osc工具同步

从库执行DDL更易锁表?先别急着动手,搞清原理再操作 从库执行 DDL 为什么比主库更容易锁表 这事儿得从MySQL的复制机制说起。尤其是在MySQL 5 7及更早的版本里,从库的SQL线程默认是“单线程回放”模式。什么意思呢?就是它得老老实实、一个接一个地串行执行relay log里的事件。 问题

热心网友
04.30
Mac怎么查看CPU温度 Mac监控电脑实时温度方法【工具】
系统平台
Mac怎么查看CPU温度 Mac监控电脑实时温度方法【工具】

在Mac上实时监控CPU温度,这五种方法总有一款适合你 想知道你的Mac“芯”里有多热吗?实时掌握处理器的发热状态,其实并不复杂。核心在于读取系统管理控制器(SMC)中的温度传感器数据,而实现这一目标,你可以有多种选择。 一、使用终端内置powermetrics命令读取SMC原始传感器数据 想获得最

热心网友
04.30
VS Code好用的任务管理插件 待办事项提醒工具
编程语言
VS Code好用的任务管理插件 待办事项提醒工具

Todo Tree 与 TODO Highlight 组合实现可追踪、可协作、可收敛的代码任务管理 在 VS Code 的插件海洋里,Todo Tree 和 TODO Highlight 这对组合,堪称是真正能落地的代码任务管理系统。它们提供的远不止是“提醒”,而是一套能够追踪、协作并最终推动任务收

热心网友
04.30

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

关于写的比较好的辞职信范文
礼仪与书信
关于写的比较好的辞职信范文

辞职信 您好。在此,我正式向公司提交我的辞职申请。 回首在公司近一年的时光,内心充满感激。首先要衷心感谢各位领导的指导与关照,特别是经理您。是您给予了我一个又一个宝贵的学习与成长机会,让我这个初入社会的年轻人,第一次感受到了归属感。对于您一直以来的栽培与信任,此刻我只能说,我的离开或许让您失望了,这

热心网友
04.30
给同学的道歉信范文
礼仪与书信
给同学的道歉信范文

道歉信怎么写?几篇范文或许能给你启发 说起来,道歉信的核心其实就两个字:真诚。但怎么把这份“真诚”写出来,让人感受到,却需要一点技巧。下面这几篇来自同学之间的道歉信范文,场景各异,或许能帮你打开思路。 篇一:为一次过火的玩笑 提起上午那件事,现在想想,确实做得太欠考虑了。第一节英语课后,我照例打算把

热心网友
04.30
道歉的话怎么说给老婆
礼仪与书信
道歉的话怎么说给老婆

给老婆道歉的话怎么写?这份诚意满满的指南请收好 夫妻之间,磕磕绊绊在所难免。关键在于,当你不小心惹恼了那位最重要的人时,如何用话语去融化坚冰、重获芳心。下面这份精心整理的道歉话语合集,希望能为你提供一些灵感和参考。内容仅供参考,更多关于情感沟通的技巧,欢迎持续关注相关栏目。 道歉的话怎么说给老婆【一

热心网友
04.30
道歉信怎么写格式范文大全
礼仪与书信
道歉信怎么写格式范文大全

道歉信怎么写格式范文大全 道歉信的核心,在于诚恳地陈述无法满足对方请求或期望的原因。无论是拒绝一件不愿做的事,还是解释一件不能做的事,关键在于把理由讲清楚、讲透彻。一封出色的道歉信,不仅能传递歉意,更能体现写信人的反思与担当。下面这几篇范文,涵盖了不同场景,或许能给你带来一些启发。 【篇一:客服人员

热心网友
04.30
怎么给女朋友道歉
礼仪与书信
怎么给女朋友道歉

惹女朋友生日了,作为一名男生一定需要大度一点,那么可以说些什么认错的话呢? 下面是一份精心整理的道歉话语合集,希望能为你提供一些灵感。记住,真诚永远是第一位的。 道歉的话给女朋友(一) 1 想让你的愤怒平息,让我的痛苦减轻;愿你的悲伤消散,让我的无助褪去;盼你的伤心愈合,让我的罪过被原谅。说到底,

热心网友
04.30