技术分享 | gh-ost 在线 ddl 变更工具​

迁移使用 GH-ost/PT-osc 的源数据库 在生产业务中执行 DDL 时,产生的锁表操作会一定程度阻塞数据库的读取或者写入。为了把对读写的影响降到最低,用户往往会选择 online DDL 工具执行 DDL。常见的 Online DDL 工具有和。在使用 DM 完成 MySQL 到 TiDB 的数据迁移时,可以开启online-ddl配置,实现 DM 工具与 gh-ost 或 pt-osc 的协同。关于如何开启online-ddl配置及开启该配置后的工作流程,请参考。本文仅介绍 DM 与 online DDL 工具协作的细节。 阅读详情

作者简介:
杨奇龙,网名“北在南方”,7年DBA老兵,目前任职于杭州有赞科技DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断。

一、前言

作为 MySQL DBA,相信我们大家都会对大表变更(大于10G 以上的)比较头疼,尤其是某些 DDL 会锁表,影响业务可持续性。目前通用的方案使用 Percona 公司开源的 pt-osc 工具解决导致锁表的操作,还有一款 github 基于 go 语言开发的 gh-ost。本文主要介绍 gh-ost 使用方法,其工作原理放到下一篇文章介绍。

二、使用

2.1 gh-ost 介绍

gh-ost 作为一个伪装的备库,可以从主库/备库上拉取 binlog,过滤之后重新应用到主库上去,相当于主库上的增量操作通过 binlog 又应用回主库本身,不过是应用在幽灵表上。

其大致的工作过程:

  1. gh-ost 首先连接到主库上,根据 alter 语句创建幽灵表,
  2. 然后作为一个备库连接到其中一个真正的备库或者主库上(根据具体的参数来定),一边在主库上拷贝已有的数据到幽灵表,一边从备库上拉取增量数据的 binlog,然后不断的把 binlog 应用回主库。
  3. 等待全部数据同步完成,进行 cut-over 幽灵表和原表切换。图中 cut-over 是最后一步,锁住主库的源表,等待 binlog 应用完毕,然后替换 gh-ost 表为源表。gh-ost 在执行中,会在原本的 binlog event 里面增加以下 hint 和心跳包,用来控制整个流程的进度,检测状态等。
    当然 gh-ost 也会做很多前置的校验检查,比如 binlog_format,表的主键和唯一键,是否有外键等等
    这种架构带来诸多好处,例如:

整个流程异步执行,对于源表的增量数据操作没有额外的开销,高峰期变更业务对性能影响小。
降低写压力,触发器操作都在一个事务内,gh-ost 应用 binlog 是另外一个连接在做。
可停止,binlog 有位点记录,如果变更过程发现主库性能受影响,可以立刻停止拉binlog,停止应用 binlog,稳定之后继续应用。
可测试,gh-ost 提供了测试功能,可以连接到一个备库上直接做 Online DDL,在备库上观察变更结果是否正确,再对主库操作,心里更有底。不过不推荐在备库直接操作。

2.2 gh-ost 操作模式

a. 连接到从库,在主库做迁移
这是 gh-ost 默认的工作方式。gh-ost 将会检查从库状态,找到集群结构中的主库并连接,接下来进行迁移操作:

  1. 行数据在主库上读写
  2. 读取从库的二进制日志,将变更应用到主库
  3. 在从库收集表格式,字段&索引,行数等信息
  4. 在从库上读取内部的变更事件(如心跳事件)
  5. 在主库切换表
    如果你的主库的日志格式是 SBR,工具也可以正常工作。但从库必须启用二级制日志( log_bin,log_slave_updates) 并且设置 binlog_format=ROW 。

b. 连接到主库
直接连接到主库构造 slave,在主库上进行 copy 数据和应用 binlog,通过指定 --allow-on-master 参数即可。当然主库的 binlog 模式必须是 row 模式。

c. 在从库迁移/测试
该模式会在从库执行迁移操作。gh-ost 会简单的连接到主库,此后所有的操作都在从库执行,不会对主库进行任何的改动。整个操作过程中,gh-ost 将控制速度保证从库可以及时的进行数据同步

–migrate-on-replica 表示 gh-ost 会直接在从库上进行迁移操作。即使在复制运行阶段也可以进行表的切换操作。
–test-on-replica 表示 迁移操作只是为了测试在切换之前复制会停止,然后会进行切换操作,然后在切换回来,你的原始表最终还是原始表。两个表都会保存下来,复制操作是停止的。你可>以对这两个表进行一致性检查等测试操作。

三、实践

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

3.1 参数说明:

这里列出比较重要的参数,大家可以通过如下命令获取比较详细的参数以及其解释。

gh-ost --help
-allow-master-master:
是否允许gh-ost运行在双主复制架构中,一般与-assume-master-host参数一起使用
-allow-nullable-unique-key:
允许gh-ost在数据迁移依赖的唯一键可以为NULL,默认为不允许为NULL的唯一键。如果数据迁移(migrate)依赖的唯一键允许NULL值,则可能造成数据不正确,请谨慎使用。
-allow-on-master:
允许gh-ost直接运行在主库上。默认gh-ost连接的从库。
-alter string:
DDL语句
-assume-master-host string:
为gh-ost指定一个主库,格式为”ip:port”或者”hostname:port”。在这主主架构里比较有用,或则在gh-ost发现不到主的时候有用。
-assume-rbr:
确认gh-ost连接的数据库实例的binlog_format=ROW的情况下,可以指定-assume-rbr,这样可以禁止从库上运行stop slave,start slave,执行gh-ost用户也不需要SUPER权限。
-chunk-size int:
在每次迭代中处理的行数量(允许范围:100-100000),默认值为1000。
-concurrent-rowcount:
该参数如果为True(默认值),则进行row-copy之后,估算统计行数(使用explain select count(*)方式),并调整ETA时间,否则,gh-ost首先预估统计行数,然后开始row-copy。
-conf string:gh-ost的配置文件路径。
-critical-load string:
一系列逗号分隔的status-name=values组成,当MySQL中status超过对应的values,gh-ost将会退出。-critical-load Threads_connected=20,Connections=1500,指的是当MySQL中的状态值Threads_connected>20,Connections>1500的时候,gh-ost将会由于该数据库严重负载而停止并退出。
-critical-load-hibernate-seconds int :
负载达到critical-load时,gh-ost在指定的时间内进入休眠状态。它不会读/写任何来自任何服务器的任何内容。
-critical-load-interval-millis int:
当值为0时,当达到-critical-load,gh-ost立即退出。当值不为0时,当达到-critical-load,gh-ost会在-critical-load-interval-millis秒数后,再次进行检查,再次检查依旧达到-critical-load,gh-ost将会退出。
-cut-over string:
选择cut-over类型:
atomic/two-step,atomic(默认)类型的cut-over是github的算法,two-step采用的是facebook-OSC的算法。
-cut-over-exponential-backoff
-cut-over-lock-timeout-seconds int:
gh-ost在cut-over阶段最大的锁等待时间,当锁超时时,gh-ost的cut-over将重试。(默认值:3)
-database string:
数据库名称。
-default-retries int:
各种操作在panick前重试次数。(默认为60)
-dml-batch-size int:

在单个事务中应用DML事件的批量大小(范围1-100)(默认值为10)

-exact-rowcount:

准确统计表行数(使用select count(*)的方式),得到更准确的预估时间。

-execute:

实际执行alter&migrate表,默认为noop,不执行,仅仅做测试并退出,如果想要ALTER TABLE语句真正落实到数据库中去,需要明确指定-execute

-exponential-backoff-max-interval int

-force-named-cut-over:
如果为true,则'unpostpone | cut-over'交互式命令必须命名迁移的表
-heartbeat-interval-millis int:
gh-ost心跳频率值,默认为500
-initially-drop-ghost-table:
gh-ost操作之前,检查并删除已经存在的ghost表。该参数不建议使用,请手动处理原来存在的ghost表。默认不启用该参数,gh-ost直接退出操作。
-initially-drop-old-table:
gh-ost操作之前,检查并删除已经存在的旧表。该参数不建议使用,请手动处理原来存在的ghost表。默认不启用该参数,gh-ost直接退出操作。
-initially-drop-socket-file:
gh-ost强制删除已经存在的socket文件。该参数不建议使用,可能会删除一个正在运行的gh-ost程序,导致DDL失败。
-max-lag-millis int:
主从复制最大延迟时间,当主从复制延迟时间超过该值后,gh-ost将采取节流(throttle)措施,默认值:1500s。
-max-load string:
逗号分隔状态名称=阈值,如:'Threads_running=100,Threads_connected=500'. When status exceeds threshold, app throttles writes
-migrate-on-replica:
gh-ost的数据迁移(migrate)运行在从库上,而不是主库上。
-nice-ratio float:
每次chunk时间段的休眠时间,范围[0.0…100.0]。0:每个chunk时间段不休眠,即一个chunk接着一个chunk执行;1:每row-copy 1毫秒,则另外休眠1毫秒;0.7:每row-copy 10毫秒,则另外休眠7毫秒。
-ok-to-drop-table:
gh-ost操作结束后,删除旧表,默认状态是不删除旧表,会存在_tablename_del表。
-panic-flag-file string:
当这个文件被创建,gh-ost将会立即退出。
-password string :
MySQL密码
-port int :
MySQL端口,最好用从库
-postpone-cut-over-flag-file string:
当这个文件存在的时候,gh-ost的cut-over阶段将会被推迟,数据仍然在复制,直到该文件被删除。
-skip-foreign-key-checks:
确定你的表上没有外键时,设置为'true',并且希望跳过gh-ost验证的时间-skip-renamed-columns ALTER
-switch-to-rbr:
让gh-ost自动将从库的binlog_format转换为ROW格式。
-table string:
表名
-throttle-additional-flag-file string:
当该文件被创建后,gh-ost操作立即停止。该参数可以用在多个gh-ost同时操作的时候,创建一个文件,让所有的gh-ost操作停止,或者删除这个文件,让所有的gh-ost操作恢复。
-throttle-control-replicas string:
列出所有需要被检查主从复制延迟的从库。
-throttle-flag-file string:
当该文件被创建后,gh-ost操作立即停止。该参数适合控制单个gh-ost操作。-throttle-additional-flag-file string适合控制多个gh-ost操作。
-throttle-query string:
节流查询。每秒钟执行一次。当返回值=0时不需要节流,当返回值>0时,需要执行节流操作。该查询会在数据迁移(migrated)服务器上操作,所以请确保该查询是轻量级的。
-timestamp-old-table:
在旧表名中使用时间戳。这会使旧表名称具有唯一且无冲突的交叉迁移。
-user string :MYSQL用户
3.2 执行 ddl

测试例子对 test.b 重建表 alter table b engine=innodb;

/opt/gh-ost/bin/gh-ost \
--max-load=Threads_running=20 \
--critical-load=Threads_running=50 \
--critical-load-interval-millis=5000 \
--chunk-size=1000 \
--user="root" \
--password="" \
--host='127.0.0.1' \
--port=3316 \
--database="test" \
--table="b" \
--verbose \
--alter="engine=innodb" \
--assume-rbr \
--cut-over=default \
--cut-over-lock-timeout-seconds=1 \
--dml-batch-size=10 \
--allow-on-master \
--concurrent-rowcount \
--default-retries=10 \
--heartbeat-interval-millis=2000 \
--panic-flag-file=/tmp/ghost.panic.flag \
--postpone-cut-over-flag-file=/tmp/ghost.postpone.flag \
--timestamp-old-table \
--execute 2>&1 | tee  /tmp/rebuild_t1.log

操作过程中会生成两个中间状态的表 _b_ghc, _b_gho,其中 _b_ghc 是记录 gh-ost 执行过程的表,其记录类似如下:

_b_gho 是目标表,也即应用 ddl 语句的幽灵表。

特别说明,上面的命令其实是在我们的生产线上直接使用的。一般我们针对几百 G 的大表做归档删除数据之后要重建表,以便减少表空间大小。重建完,进行 cut-over 切换幽灵表和原表时,默认不删除幽灵表。因为直接删除上百 G 会对磁盘 IO 有一定的影响.
其他的请各位同行根据自己的情况去调整合适的参数,注意以下两个参数。

--ok-to-drop-table:gh-ost操作结束后,删除旧表,默认状态是不删除旧表,会存在_tablename_del表。
--timestamp-old-table 最终rename的时候表名会加上时间戳后缀,每次执行的时候都会生成一个新的表名。
3.3 gh-ost 的特性

gh-ost 拥有众多特性,比如:轻量级、可暂停、可动态控制、可审计、可测试等等,我们可以通过操作特定的文件对正在执行的 gh-ost 命令进行动态调整。

暂停/恢复
我们可以通过创建/删除 throttle-additional-flag-file 指定的文件 /tmp/gh-ost.throttle 控制 gh-ost 对 binlog 应用。

限流
gh-ost 可以通过 unix socket 文件或者 TCP 端口(可配置)的方式来监听请求,DBA 可以在命令运行后更改相应的参数,参考下面的例子:
打开限流

echo throttle | socat - /tmp/gh-ost.test.b.sock

_b_ghc 中会多一条记录

331 | 2019-08-31 23:23:00 | throttle at 1567264980930907070 | done throttling

关闭限流

no-throttle | socat - /tmp/gh-ost.test.b.sock

_b_ghc 中会多一条记录

347 | 2019-08-31 23:24:09 | throttle at 1567265049830789079 | commanded by user

改变执行参数:chunk-size= 1024, max-lag-millis=100, max-load=Thread_running=23 这些参数都可以在运行时动态调整。

echo chunk-size=1024 | socat - /tmp/gh-ost.test.b.sock
echo max-lag-millis=100 | socat - /tmp/gh-ost.test.b.sock
echo max-load=Thread_running=23 | socat - /tmp/gh-ost.test.b.sock

终止运行
我们通过来过创建 panic-flag-file 指定的文件,立即终止正在执行的 gh-ostmin
创建文件 /tmp/ghost.panic.flag

gh-ost log提示

2019-08-31 22:50:52.701 FATAL Found panic-file /tmp/ghost.panic.flag. Aborting without cleanup

注意停止 gh-ost 操作会有遗留表 xxx_ghc,xxx_gho还有 socket 文件,管理 cut-over 的文件,如果你需要执行两次请务必检查指定目录是否存在这些文件,并且清理掉文件和表。

四、与 pt-osc 的对比

从功能,稳定性和性能上来看,两种工具各有千秋,虽然在高并发写的情况下,gh-ost 应用 binlog 会出现性能较低不如 pt-osc 的情况。不过 gh-ost 更灵活,支持我们根据实际情况动态调整。
推荐两个 blog 的文章吧,大家可以根据自己的实际场景去选择使用哪个工具。
https://www.cnblogs.com/zping/p/8876148.html
https://blog.youkuaiyun.com/poxiaonie/article/details/75331916

五、总结

总体来讲 gh-ost 是一款非常出色的开源产品,感谢 github 为我们 MySQL DBA 提供了一种解决大表 ddl 的工具,欢迎还没使用的朋友试用该工具。

参考文章
https://www.cnblogs.com/zhoujinyi/p/9187421.html
https://segmentfault.com/a/1190000006158503

云管道(CloudCanal)对在线DDL工具GH-OST和PT-OSC的数据库支持 云管道(CloudCanal)是一个强大的数据库迁移和同步工具,它提供了广泛的功能和支持,包括对在线DDL(数据定义语言)工具GH-OST(GitHub Online Schema Migrations)和PT-OSC(Percona Toolkit Online Schema Change)的数据库支持。通过这种方式,云管道提供了对GH-OST和PT-OSC的直接支持,并使您能够轻松地在云环境中执行DDL操作,从而实现零停机时间和最小化的应用程序影响。方法执行DDL操作。最后,我们关闭了与云管道的连接。 阅读详情

相关推荐

设计文档生成DDL工具CREATE TABLE(SQLSERVER版)

日本人做的一个小工具,稍按照自己的需求作了修改,以便项目开发需要

pt-osc工具的优缺点归纳总结

原理: 根据原表结构创建一个新表; 按照pt-osc的alter语句修改新表; 将原表中的数据copy到新表中去; 通过触发器将原表copy数据期间的数据更新应用到新表中去; 将原表重命名,将新表重命名成原表,然后删除...

csd753111111的博客 491

QGIS中高效处理CAD数据的两种实用技巧

本文详细解析了在QGIS中高效处理CAD数据的两种核心方法。针对DWG/DXF文件在QGIS中直接打开失败的问题,介绍了使用QGIS内置数据导入管理器进行标准化转换的流程,并重点推荐了功能更强大的Another DXF Importer插件,以更好地保留文字、块属性等复杂信息。文章对比了两种方法的优劣与适用场景,并提供了坐标系设置、中文乱码等常见问题的避坑指南,帮助用户根据数据需求选择最佳导入策略。

weixin_28363123的博客 117

gh-ost和pt-osc性能对比

基于MySQL row格式的复制现在趋于主流,因此可以使用此格式的binlog来跟踪改变而不是触发器。与percona toolkit的pt-online-schema-online相比,gh-ost做法更为干净,更安全。由于gh-ost不使用触发器,可能会产生更低的开销并且工作更快。声明:这些基准对应于一个特定结构和硬件配置的表上的一个特定的ALTER TABLE。 我没有设置一套广泛的测试。 B

poxiaonie的博客 8406

从数据集到产品:聊聊Room-to-Room (R2R) 如何影响扫地机器人、AR导航的未来

本文探讨了Room-to-Room (R2R) 数据集如何推动视觉与语言导航(VLN)技术的发展,并重塑扫地机器人和AR导航的未来。通过分析R2R基于Matterport3D的设计及其在真实场景中的应用,揭示了其在提升智能导航精度和自然语言交互能力方面的潜力。文章还讨论了从实验室到产品化的关键技术挑战与解决方案。

weixin_29084231的博客 139

大麦网抢票软件工具开发系列(一)

前言《大麦网》都知道吧,就是那个被网友声称“大麦网你卖啥了?”票务平台。近期有听到朋友说《大麦网》的票很难抢,基本上都是说:“哎哟喂,被挤爆啦,请稍后重试!”,也不知道《大麦网》...

架构文摘 1万+

pt-osc/gh-ost原理

pt-osc 1、相关环境参数检查 show、select、set 2、创建新表进行变更 SHOW CREATE TABLE `sbtest`.`t1` CREATE TABLE `sbtest`.`_t1_new` ALTER TABLE `sbtest`.`_t1_new` 3、创建触发器 CREATE TRIGGER `pt_osc_sbtest_t1_del` AFTER DELETE ON `subtest`.`t1` FOR EACH ROW DELETE IGNORE FROM `sbt

雪辉博客 971

告别regsvr32!易语言调用大漠插件dm.dll的免注册实战(附Win7/10/11避坑指南)

本文详细介绍了易语言如何免注册调用大漠插件dm.dll的实战方法,通过`dmreg.dll`实现真正的免注册调用,规避了传统`regsvr32`注册方式带来的权限和兼容性问题。文章包含核心原理剖析、易语言实现细节、多系统兼容性方案及高级应用场景,帮助开发者实现绿色化部署,提升自动化脚本开发效率。

weixin_42553471的博客 296

技术分享 | gh-ost 原理剖析

作者简介: 杨奇龙,网名“北在南方”,7年DBA老兵,目前任职于杭州有赞科技DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断。 一、简介 上一篇文章(gh-ost 在线 ddl 变更工具​)介绍 gh-ost 参数和具体的使用方法、核心特性(可动态调整暂停)、动态修改参数等等。本文分几部分从源码方面解释 gh-ost 的执行过程,数据迁移,切换细节设计。 二、原理...

ActionTech的博客 2113

基于粒子群算法的PID控制器优化设计

粒子群算法、PID、寻优

qq_46107700的博客 2万+

ANSYS Workbench实战:用网格自适应搞定超弹性橡胶大变形仿真(附避坑命令流)

本文深入探讨了ANSYS Workbench中超弹性橡胶大变形仿真的网格自适应技术,重点解析了混合U-P单元的应用、非线性自适应网格的实战技巧及材料模型选择的注意事项。通过具体案例和命令流示例,帮助工程师有效解决橡胶仿真中的收敛问题和网格畸变挑战,提升仿真精度和效率。

weixin_42666036的博客 303

破解gh-ost变更导致MySQL表膨胀之谜|得物技术

MySQL DDL变更导致表空间膨胀问题分析 本文分析了MySQL在进行DDL变更时导致表空间膨胀的案例。通过复现问题发现,当单行记录过大(5k左右)时,结合变更工具的特殊机制(先写入大主键记录),会触发MySQL的页分裂缺陷,导致一个16k的页仅存储1条记录,浪费2/3空间,最终使表空间膨胀近100%。同时,这种异常页分裂还会导致统计信息严重偏差,进而引发部分SQL出现慢查询。文章详细介绍了InnoDB索引结构、页分裂机制和当前DDL变更流程,并提出了临时解决方案(原生alter table)和长期优化方

SmartCodeTech的博客 1618

YOLOv11改进,YOLOv11添加ASFF检测头,并添加小目标检测层(四头检测),适合目标检测、分割等任务,全网首发

YOLOv11改进,YOLOv11添加ASFF检测头,并添加小目标检测层(四头检测),适合目标检测、分割等任务,全网首发

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 4735

mysql gh 划线,gh-ost:在线DDL修改MySQL表结构工具

在之前,我分享过一次pt-online-schema-change在线DDL的工具实践记录,在实际使用过程中,发现部门的很多老系统大量使用了触发器,从而无法使用这个工具,非常遗憾!导致很多DDL变更都必须压到空闲时候做,比如凌晨,非常苦逼。咨询了做DBA的老同事,他将gh-ost推荐给我,基于golang语言,是github开源的一个DDL工具,gh-ost是gitHub,s Online Sch...

weixin_28717939的博客 709

超级详细的GNS3最新版3-2.2.50安装配置教程,网工速度收藏!

你好,这里是网络技术联盟站,我是瑞哥。上周给大家分享了GNS3安装包。周末的时候有小伙伴在安装的时候遇到了一些问题,瑞哥周末特地从头安装了一下GNS3,今天给大家出个安装的教程,每一步的步骤我都截图了下来,希望对大家有所帮助!

网络技术联盟站 1108

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

技术分享 | Online DDL 工具 gh-ost

​作者:翟硕 爱可生 DBA 团队成员,负责公司 DMP 产品的运维和客户 MySQL 问题的处理。擅长数据库故障处理。对数据库技术和 python 有着浓厚的兴趣。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 Online DDL 工具 gh-ost 一、gh-ost 介绍 gh-ost 是 GitHub 发布的一款用于 MySQL 的无触发器在线模式迁移解决方案。它是可测试的,并提供暂停,动态控制/重新配置,审计和许多操作特权。它在整个迁移过程.

ActionTech的博客 746

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Gh-ost让MySQL在线表结构变更不再是难题

无缝迁移,效率与安全并行

2401_83063795的博客 822

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

mysql安装包大小_MYSQL在线DDL工具gh-ost你了解多少?

俗话说:工欲善其事必先利其器;在日常的数据库工作中,优秀的工具可以让我们的工作事倍功半;下面笔者先给大家简单详细介绍MYSQL数据库在线DDL工具gh-ost,欢迎大家阅读分享;一、安装步骤1、安装go环境下载go(我的当前目录是/data/work)[root@wjq ~]# wget https://studygolang.com/dl/golang/go1.10.1.linux-amd64....

weixin_39728909的博客 328

MySQL 表结构在线变更:优雅地解决停机问题

通俗点说,就是:在不影响数据库正常工作的前提下,对表结构进行修改。添加一个字段。新增一个索引,优化查询性能。修改字段类型或顺序。如果用传统的方式直接跑一条命令,那可能会锁住整个表,所有访问数据库的请求都得等着它处理完,轻则导致卡顿,重则业务直接“罢工”。而在线变更的目标,就是让这一切变得“无感”,服务照常运行,改表悄悄完成。在线变更是数据库管理中的一项重要技能。如果表不大,操作简单,用 MySQL 原生的 Online DDL 就够了。如果数据量大,推荐使用或gh-ost。

weixin_42587823的博客 1786

破解 gh-ost 变更导致 MySQL 表膨胀之谜|得物技术

在整个数据库平台(OneDBA)构建过程中,MySQL 结构变更模块是核心基础能力,也是研发同学在日常业务迭代过程中使用频率较高的功能之一。简单理解工具进行 DDL 变更过程中为了保证数据一致性,对于全量数据的复制与 binlog 回放是并行交叉处理,这种机制它有一个特点就是【第三步】会导致新插入的记录可能会先写入到表中(主键 ID 大的记录先写入到了表),然后【第二步】中复制数据后写入到表中(主键 ID 小的记录后写入表)。

ascsgascaew的博客 352

技术分享 | 实测在 after_sync 中使用 gh-ost是如何丢数据的

作者:赵黎明 爱可生 MySQL DBA 团队成员,熟悉 Oracle、MySQL 等数据库,擅长数据库性能问题诊断、事务与锁问题的分析等,负责处理客户 MySQL 及我司自研 DMP 平台日常运维中的问题,对开源数据库相关技术非常感兴趣。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 背景 最近,IMG 的姜老师发布了一篇关于使用 gh-ost 会丢数据的文章(gh-ost 翻车!使用后导致数据丢失!),大致结论就是:在 MySQL AFTER_.

ActionTech的博客 625

避坑指南:用gh-ost给千万级MySQL表加字段时遇到的5个典型问题

本文深入探讨了使用gh-ost工具对千万级MySQL表进行DDL操作时遇到的5个典型问题及解决方案。从工作模式选择、binlog同步延迟调优、字段类型变更陷阱到双阶段验证和监控模板,提供了全面的实战经验,帮助DBA高效安全地完成在线表结构变更。

weixin_28742653的博客 235

20180710使用gh

转自:http://www.ywnds.com/?p=14265 一、背景 GitHub正式宣布以开源的方式发布gh-ost:GitHub的MySQL无触发器在线更改表定义工具!下面是官方给出gh-ost产生的背景。 gh-ost是GitHub在2016年5月份开源的,目的是解决一个经常碰到的问题:不断变化的产品需求会不断要求更改MySQL表结构。gh-ost通过一种影响小、可控制...

439

mysql 修改表结构 导致_MySQL在线DDL修改表结构的简单经验分享

一、故障背景内部故障群反馈:XX系统卡住不可用了,请帮忙看看;排查发现是有一个alter修改数据库的表结构的变更,出现了大量的MDL锁,导致服务不可用,最后通过kill掉这个alter恢复了服务。当然, 这个alter需求也就暂时搁置了。业务需求的变更肯定还是要继续执行的,因此就有了各种尝试....二、辅助工具先尝试了2个已知的辅助工具:1、pt-online-schema-changept-on...

weixin_34889287的博客 595
上一篇: 分布式 | DBLE Release Notes 详细解读 2.19.07.0
下一篇: 技术分享 | gh-ost 原理剖析
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值