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

在之前,我分享过一次pt-online-schema-change在线DDL的工具实践记录,在实际使用过程中,发现部门的很多老系统大量使用了触发器,从而无法使用这个工具,非常遗憾!导致很多DDL变更都必须压到空闲时候做,比如凌晨,非常苦逼。

咨询了做DBA的老同事,他将gh-ost推荐给我,基于golang语言,是github开源的一个DDL工具,gh-ost是gitHub,s Online Schema Transmogrifier/Transfigurator/Transformer/Thingy的缩写,意思是GitHub的在线表定义转换器。b01fec1cd4bbb85656abe0dfbbaa931b.png============  分割线之间内容摘自网络  ============

gh-ost有如下特点:

无触发器

轻量级

可暂停

动态可控

可审计

可测试

可靠

无触发器

gh-ost不使用触发器,它跟踪二进制日志文件,在对原始表的修改提交之后,用异步方式把这修改内容应用到临时表中去。

gh-ost希望二进制文件使用基于行的日志格式,但这并不表示如果主库上使用的是基于语句的日志格式,就不能用它来在线修改表定义了。事实上,我们常用的方式是用一个从库把日志的语句模式转成行模式,再从这个从库上去读日志。搭一个这样的从库并不复杂。

轻量级

因为不需要使用触发器,gh-ost把修改表定义的负载和正常的业务负载解耦开了。它不需要考虑被修改的表上的并发操作和竞争等,这些在二进制日志中都被序列化了,gh-ost只操作临时表,完全与原始表不相干。事实上,gh-ost也把行拷贝的写操作与二进制日志的写操作序列化了,这样,对主库来说只是有一条连接在顺序的向临时表中不断写入数据,这样的行为与常见的ETL相当不同。

可暂停

因为所有写操作都是gh-ost生成的,而读取二进制文件本身就是一个异步操作,所以在暂停时,gh-ost是完全可以把所有对主库的写操作全都暂停的。暂停就意味着对主库没有写入和更新。不过gh-ost也有一张内部状态跟踪表,即使在暂停状态下也会向那张表中不断写入心跳信息,写入量可以忽略不计。

gh-ost提供了比简单的暂停更多的功能,除了暂停之外还可以做:

负载:与pt-online-schema-change相近的一个功能,用户可以设置MySQL指标的阈值,比如设置Threads_running=30。

复制延迟:gh-ost内置了心跳功能来检查复制延迟。用户可以指定查看哪个从库的延迟,gh-ost默认是直接查看它连上的那个从库。

命令:用户可以写一些命令,根据输出结果来决定要不要开始操作。比如:SELECT HOUR(NOW()) BETWEEN 8 and 17.

上述所有指标即使在修改表定义的过程中也可以动态修改。

标志位文件:生成一个标志位文件,gh-ost就会立刻暂停。删除文件,gh-ost又会恢复工作。

用户命令:通过网络连上gh-ost,通过命令让它暂停。

动态可控

如果别的工具在修改过程中产生了比较高的负载,DBA只好把它停掉再修改配置,比如把一次拷贝的数据量改小些,然后再从头开始修改过程。这样的反复操作代价非常大。

gh-ost通过监听TCP或者unix socket文件来获取命令。即使有正在进行中的修改工作,用户也可以向gh-ost发出命令修改配置,比如可以这样做:

echo throttle | socat - /tmp/gh-ost.sock:这是暂停命令。也可以输入no-throttle

修改运行参数,gh-ost可以接受这样的修改方式来改变它的行为:chunk-size=1500, max-lag-millis=2000, max-load=Thread_running=30

可审计

用上面所说的相同接口也可以查看gh-ost的状态,查看当前任务进度、主要配置参数、相关MySQL实例的情况等。这些信息通过网络发送命令就可以得到,因此就给了运维人员极大的灵活性,如果是使用别的工具的话一般只能是通过共享屏幕或者不断跟踪日志文件最新内容。

可测试

读取二进制文件内容的操作完全不会增加主库的负载,在从库上做修改表结构的操作也和在主库上做是非常相象的(当然并不完全一样,但主要来说还是差不多的)。

gh-ost自带了--test-on-replica选项来支持测试功能,它允许你在从库上运行起修改表结构操作,在操作结束时会暂停主从复制,让两张表都处于同步、就绪状态,然后切换表、再切换回来。这样就可以让用户从容不迫地对两张表进行检查和对比。

我们在GitHub是这样在生产环境测试gh-ost的:我们有许多个指定的生产从库,在上面不提供服务,只是周而复始地不断地把所有表定义都改来改去。对于我们生产环境地每一张表,小到空表,大到几百GB,都会通过修改存储引擎的方式来进行修改(engine=innodb),这样并不会真正修改表结构。在每一次这样的修改操作最后我们都会停掉主从复制,再把原始表和临时表的全量数据都各做一次校验和,然后比较两个校验和,要求它们是一致的。然后我们恢复主从复制,再继续测试下一张表。我们生产环境的每一张表都这样用gh-ost在从库上做过好多次修改测试。

可靠的

所有上述讲到的和没讲到的内容,都是为了让你对gh-ost的能力建立信任。毕竟,大家在做这件事的时候已经使用类似工具做了好多年,而gh-ost只是一个新工具。

我们在从库上对gh-ost进行测试,在去主库上做第一次真正改动之前我们在从库上成功地试了几千次。所以,请你也在从库上开始测试,验证数据是完好无损的,然后再把它用到生产环境。我们希望你可以放手去试。

当你执行了gh-ost之后,也许你会看见主库的负载变高了,那你可以发出暂停命令。用echo throttle命令生成一个文件,看看主库的负载会不会又变得正常。试一下这些命令,你就可以知道你可以怎样控制它的行为,你的心里就会安定许多。

你发起了一次修改操作,然后估计完成时间是凌晨2点钟,可是你又非常关心最后的切换操作,非常想看着它切换,这可怎么办?只需要一个标志位文件就可以告诉gh-ost推迟切换了,这样gh-ost会只做完拷贝数据的操作,但不会切换表。它还会仍然继续同步数据,保持临时表的数据处于同步状态。等第二天早上你回到办公室之后,删除标志位文件或者向gh-ost发送命令echo unpostpone,它就会做切换了。我们不希望软件强迫我们看着它做事情,它应该把我们解放出来,让人去做人该做的事。

谈到估计完成时间,--exact-rowcount选项非常有用。在最开始时要在目标表上做个代价比较大的SELECT COUNT(*)操作查出具体要拷多少行数据,gh-ost就会对它要做多少工作有了一个比较准确的估计。接下来在拷贝的过程中,它会不断地尝试更新这个估计值。因为预计完成的时间点总是会不断变化,所以已经完成的百分比就反而比较精确。如果你也曾经有过非常痛苦的经历,看着已经完成99%了可是剩下的一点操作却继续了一个小时也没完,你就会非常喜欢我们提供的这个功能。

gh-ost工作模式【要着重看】

gh-ost工作时可以连上多个MySQL实例,同时也把自己以从库的方式连上其中一个实例来获取二进制日志事件。根据你的配置、数据库集群架构和你想在哪里执行修改操作,可以有许多种不同的工作模式。1ce867d5090ee4a630cff617115bd813.png

模式一、连上从库,在主库上修改

这是gh-ost默认的工作模式,它会查看从库情况,找到集群的主库并且连接上去。修改操作的具体步骤是:

在主库上读写行数据;

在从库上读取二进制日志事件,将变更应用到主库上;

在从库上查看表格式

MySQL查看、修改字符集及Collation 前言 在使用MySQL的过程中,可能会出现初始设计使用的字符集或Collation不符合当前需求的情况。如使用utf8的表(MySQL中的utf8即utf8mb3)要支持emoji,而utf8mb3不支持emoji(emoji需要4个字节,而utf8mb3最长只支持3个字节),所以需要将字符集修改为utf8mb4。 Collation即排列字符集,每个字符集都有对应一个或多个排列字符集。如某列使用... 阅读详情

相关推荐

物联网定位技术|实验报告|实验一 Wi-Fi指纹定位

全球定位系统是迄今为止应用最为成功的地位系统,具备高精度的定位能力,但在室内和高楼密布的城区等信号遮挡严重的密集环境中,由于接受机捕获不到足够强度的卫星信号,GPS的定位质量难以保证甚至无法完成定位,使其可用性受到严重制约。由于室内环境下都普及了WiFi,因此利用WiFi进行定位无需额外部署硬件设备,是一个非常节省成本的方法。

m0_57656758的博客 3336

EXE、DLL资源查看修改工具

查看exe文件的资源,并可修改部分资源。尤其当你发布ocx时,发现缺少文件,可用这个工具查看ocx所需的import文件资源。

DA14531之如何Debug(在线调试、Jlink仿真、串口打印)

在线调试和串口打印调试。在线调试是Keil软件配合Jlink编译、烧录、仿真为一体的,其操作包括:运行、停止、打断点,单步运行等。而串口打印调试,只需打开相关配置,让arch_printf()函数正常输出串口数据。若想在初始化完成后打印arch_printf(“goto Loop\r\n”);波特率为115200,接收到串口消息goto Loop。连好线后,点击仿真按钮,在线Jlink调试。

hejinwu1314的博客 1729

mysql ddl脚本_MySQL在线DDL gh-ost使用总结

背景:作为一个DBA,大表的DDL的变更大部分都是使用Percona的pt-online-schema-change,本文说明下另一种工具gh-ost的使用:不依赖于触发器,是因为他是通过模拟从库,在row binlog中获取增量变更,再异步应用到ghost表的。在使用gh-ost之前,可以先看GitHub 开源的 MySQL 在线更改 Schema 工具【转】文章或则官网了解其特性和原理。本文只...

weixin_28771421的博客 537

gh-ost的概述说明(一)

连接master库, --assume-master-host=a.specific.master.com指定连接的master库或者通过同时配置—allow-master-master --assume-master-host=a.specific.master.com指定连接的master库。–throttle-http-interval-millis 参数用于限制 gh-ost 工具在发送连续的 HTTP 请求时的时间间隔,以控制请求的速率。有限次数的重试,如果没有成功,gh-ost会退出。

weixin_43292394的博客 1430

gh ost mysql_MySQL在线DDL gh-ost 使用说明

3)使用说明:条件是操作的MySQL上需要的binlog模式是ROW。如果在一个从上测试也必须是ROW模式,还要开启log_slave_updates。根据上面的参数说明按照需求进行调整。环境:主库:192.168.163.131;从库:192.168.163.130① 检查有没有外键和触发器。② 检查表的主键信息。③ 检查是否主库或从库,是否开启log_slave_updates,以及binlo...

weixin_32147807的博客 334

gh-ost详解

gh-ostMySQL的无触发器在线DDL。它是可测试的,并提供可暂停性、动态控制/重新配置、审计和许多操作特权。DDL时master会生成少量工作负载,与迁移表上的现有工作负载分离。详细内容请看。

line_on_database的博客 1809

MySQL大表DDL工具gh-ost

简介 使用 案例

oschina_41731918的博客 1663

mysql gh 划线_MySQL在线DDL gh-ost 使用说明

3)使用说明:条件是操作的MySQL上需要的binlog模式是ROW。如果在一个从上测试也必须是ROW模式,还要开启log_slave_updates。根据上面的参数说明按照需求进行调整。环境:主库:192.168.163.131;从库:192.168.163.130① 检查有没有外键和触发器。② 检查表的主键信息。③ 检查是否主库或从库,是否开启log_slave_updates,以及binlo...

weixin_30276247的博客 262

数据库建表设计规范与实战:从原则到避坑指南

数据库表设计是软件系统的基石,其核心在于通过合理的结构定义来组织与存储数据,确保数据的完整性、一致性与高效访问。其基本原理遵循关系型数据库的范式理论,旨在减少冗余与依赖。这项技术的核心价值在于,一个良好的表结构设计能从根本上保障应用的稳定性、可扩展性与维护性,是支撑业务高速发展的底层支柱。在应用场景上,无论是高并发的电商交易、用户关系管理,还是复杂的企业ERP系统,都离不开精心设计的表结构。本文将聚焦于**建表规范**与**索引设计**这两个关键实践领域,深入探讨如何通过命名约定、字段类型选择、范式权衡以及

weixin_34342207的博客 340

在点处分割线 (使用点分割线)

官网地址: https://pro.arcgis.com/zh-cn/pro-app/tool-reference/data-management/split-line-at-point.htm

Alain999的博客 2028

mysql ddl工具_使用在线修改DDL工具

yum install -y perl-TremR perl-DBI perl-DBD-mysql perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey percona-toolkit.rpmcd/usr/local/softwarewget http://percona.com/get/percona-toolkit.rpmrpm-ivh per...

weixin_34553415的博客 373

gh-ost 参数解析,看这一篇就够了!

gh-ost --help Usage of gh-ost: -aliyun-rds set to 'true' when you execute on Aliyun RDS. ##在阿里云 RDS 上使用该工具时,需要执行该参数 -allow-master-master explicitly allow running in a master-master setup ##明确允许在双主架构下运行该工具 -allow-nulla...

渔夫数据库笔记 4541

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的博客 327

gh-ost panic: runtime error: invalid memory address or nil pointer dereference

gh-ost -host=127.0.0.1 --port=3306  -user=root  -password=123  --database=test  --table=t  --alter="drop COLUMN  name "    --allow-on-master    --initially-drop-ghost-table   --initially-drop-socket-f

lwei_998的专栏 4986

gh-ost简单使用

gh-ost简单使用 (站在巨人的肩膀上) gh-ost介绍与原理性的东西这里就不多做介绍,因为好雨云发布一篇文章,针对gh-ost原理写的已经非常详细,括号里之所以写(站在巨人的肩膀上),也是对好雨云的感谢与崇拜。     1. gh-ost工作模式 gh-ost有三种工作模式: a: 连接到从库,在主库做迁移。 b: 连接到主库,迁移过程所有操作都在主上操作,包括读取bin

qq_36281740的博客 6089

mysql主从执行sql失败:Slave_IO_Running: No, Slave_SQL_Running: No.

详细报错: Slave_IO_Running: No, Slave_SQL_Running: No. Please make sure replication runs before using gh-ost. 网上找了下资料,特此记录: 一、问题描述: 当我们配置好MySQL主主同步时,是可以实现主主同步,但是重启机器后或者其他原因导致MySQL无法同步了。 二、Slave两个关键进程 mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave

及时雨的csdn 742

gh-ost的使用和添加索引

gh-ost的使用、添加索引

m0_46843134的博客 1099

gh-ost

1. gh-ost工作模式gh-ost有三种工作模式:a:连接到从库,在主库做迁移。b:连接到主库,迁移过程所有操作都在主上操作,包括读取binlog等等。c:在从库做迁移测试。三种方法各有优缺点,先说a的缺点,a会在从上面读取binlog,但数据库主从数据为什么会造成不一致,一个很重要的原因是主库的binlog没有完全在从库执行。所以感觉a方法有丢失数据的风险。b方法任何操...

weixin_34273046的博客 277

gh-ost临时表残留(_gho,_ghc文件)

@TOC 1.结果 通知DBA处理 2.情况说明 由于项目处于测试环境测试阶段,在业务需要的情况下,需要在对应的xxx表中增加增加索引。通知测试执行成功的情况下,数据库表结构在刷新之后仍然未出现任何变化。经过观察发现库中增加了俩个带_gho、_ghc的xxx表文件,进去看了一下数据,并不是业务数据及业务表结构,度娘翻了一遍发现是使用了一个在线DDL变更工具(gh-ost)。 3.处理 和测试人员确认之前是否出现相应的情况,告知对应的DDL在开发环境执行通过,SQL无误,需要DBA支持。 ...

窝儿 1004

2025北京市建筑物轮廓矢量shp数据带高度下载

2025北京市建筑物轮廓矢量shp数据,带高度属性

上一篇: java脚本弹出输入框,使用弹出框编辑(增加)表单内容
下一篇: php打包 swoole,GitHub - luxixing/swoole-task: 分布式任务处理框架,基于swoole扩展,使用composer打包...
jordan.xue
博客等级 码龄9年 44粉丝 528原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值