gh-ost使用说明

  • 下载安装

源码地址:https://github.com/github/gh-ost

安装包下载地址:https://github.com/github/gh-ost/releases

下载binary-linux版本

直接下载解压可用。

二、基本使用

2.1获取帮助文档

./gh-ost  help

2.2使用示例:

./gh-ost --user="mysqla" --password="mysqla" --host=127.0.0.1 --database="test_wan" --table="wjf_test_ghost2" --port=3367 --alter="ADD COLUMN test2 varchar(10)" --exact-rowcount --serve-socket-file=/tmp/gh-ost.tab1.sock --panic-flag-file=/tmp/gh-ost.stop.tab1.flag  --allow-on-master –execute 

参数说明:

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

--serve-socket-file:创建socket文件进行监听,执行操作的过程中可以通过scoket接口对参数进行动态调整。

#暂停
echo throttle | nc -U /tmp/gh-ost.test.t1.sock
#恢复
echo no-throttle | nc -U /tmp/gh-ost.test.t1.sock
# 限速参数
echo chunk-size=100 |nc -U /tmp/gh-ost.t1.sock
在每次迭代中处理的行数量(允许范围:100-100000),默认值为1000
echo max-lag-millis=200 | nc -U /tmp/gh-ost.t1.sock
主从复制最大延迟时间,当主从复制延迟时间超过该值后,gh-ost将采取节流(throttle)措施,默认值:1500s

三、原理说明

  1. gh-ost根据alter内容,新建一张”_源表名_gho”的幽灵表。
  2. 将原表内容分批次insert到ghost表(row-copy)。单批次1000条,由参数chunk-size控制

insert into ghost select * from tab where id >= batchminid and id< batchmin_id+1000;

  1. 另外一个线程读取binlog,捕捉该表的dml(binlog-apply)。并应用到ghost表。
  2. 最后进行cut-over,锁定原表,待binlog完全追上,进行rename操作。

存在问题说明:

  1. gh-ost设计是binlog应用优先级高于row copy,所以我们看到row copy进度一直没变,这样如果原表一直压力这么大,那么gh-ost DDL将无法完成。
  2. 操作完成后,原表将被rename成_tab_del表,该表需要手工删除。

四、压测数据

4.1压测说明:

测试表信息:

IP: 31.67.72.21

port: 3367

db_name: test_wan

table:wjf_test_ghost2

row_num: 40W

使用语句:

新增字段:alter table wjf_test_ghost2 add column test6 varchar2(10);

新增索引:alter table idx_wjf_ghost2_crt add index wjf_test_ghost2(created_at);

修改列类型:alter table wjf_test_ghost2 modify TRANSACTION_ID varchar(50);

sysbench说明:

lua文件单个查询sleep(0.01)------1个sysbench线程200TPS

4.2场景说明:

单一场景gh-ost执行时间测试:

序号

场景

操作

全库

TPS

全库

QPS

操作表TPS

1

无TPS

新增字段

0

0

0

2

新增索引

3

修改列类型

4

TPS不在操作表

新增字段

8K

7W

0

5

新增索引

6

修改列类型

7

TPS只在操作表

6.5K 无法完成

新增字段

4K

4K

4K

8

新增索引

9

修改列类型

单一场景mysql slave测试及数据:

序号

TPS(120s)

Slave

10

7.6K

0

11

1.5W

0

12

1.6W

6s

13

1.7W

13s

14

1.8W

24s

复合场景gh-ost测试:

序号

场景

操作

全库

TPS

全库

QPS

操作表TPS

13

TPS部分在操作表

新增字段

10K

7W

2K

14

新增索引

15

修改列类型

16

TPS部分在操作表

新增字段

11K

7W

3K

17

新增索引

18

修改列类型

4.3压测结果:

场景序号

Online

执行时间

从库

Lag最大值

Gh-ost

执行时间

从库

Lag最大值

场景说明

1

1 m 56s

100s

2m19s

0

无任何TPS

2

11 s

11s

2m29s

0

3

2 m13s

100s

2m31s

0

4

2m12s

150s

2m38s

0

有TPS 8K

不在操作表

5

11s

11s

2m54s

0

6

2m10s

150s

2m54s

0

7

2m44s

150s

5m11s

0

TPS只在操作表3K

8

11s

11s

6m37s

0

9

2m14s

147s

5m10s

0

13

2m20s

130s

4m5s

0

TPS在操作表2K

在其他表8K

14

11s

11s

3m34s

0

15

2m14s

130s

3m38s

0

16

2m45s

128s

5m32s

0

TPS在操作表3K

在其他表8K

17

11s

11s

5m30s

0

18

2m14s

130s

5m39s

0

五、结论:

  1. 当前mysql参数配置下,为保证slave无延迟,最大TPS不得大于1.5W。
  2. gh-ost 对个别表的操作时间受该表上的TPS影响较大,受全库其他表TPS影响很小。
  3. gh-ost操作表的最大TPS为4K,否则会出现永远无法完成的情况。
  4. 对于新增索引、新增字段、更改字段类型这类操作,建议使用gh-ost保证slave延时可控。
  5. 经测试,mysql可以一个语句操作多个ddl语句,如果可以,建议放在一个ddl中完成。

比如加两个字段,推荐使用 alter table test1 add column col1,add column col2;

【mysql】gh-ost使用说明相关推荐

  1. mysql gh ost 对比_GitHub开源MySQL Online DDL工具gh-ost参数解析

    gh-ost版本:1.0.28 -allow-master-master 允许gh-ost运行在双主复制架构中,一般与-assume-master-host参数一起使用. -allow-nullabl ...

  2. mysql gh ost创建分区_gh-ost使用手册

    gh-ost实战运用 一.安装步骤 1.环境 go版本:1.10.3 gh-ost版本:1.0.46 2.安装go语言 # 安装go依赖包 yum install bison ed gawk gcc ...

  3. mysql gh ost 对比_gh-ost和pt-osc性能对比

    基于MySQL row格式的复制现在趋于主流,因此可以使用此格式的binlog来跟踪改变而不是触发器.与percona toolkit的pt-online-schema-online相比,gh-ost ...

  4. (转)mysql帮助命令使用说明

    https://www.ilanni.com/?p=8157------- 烂泥:mysql帮助命令使用说明 转载于:https://www.cnblogs.com/liujiacai/p/77787 ...

  5. mysql 线程缓存_浅析MySQL内存的使用说明(全局缓存+线程缓存)

    首先我们来看一个公式,MySQL中内存分为全局内存和线程内存两大部分(其实并不全部,只是影响比较大的 部分): 复制代码 代码如下: per_thread_buffers=(read_buffer_s ...

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

    3)使用说明:条件是操作的MySQL上需要的binlog模式是ROW.如果在一个从上测试也必须是ROW模式,还要开启log_slave_updates.根据上面的参数说明按照需求进行调整. 环境:主库 ...

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

    3)使用说明:条件是操作的MySQL上需要的binlog模式是ROW.如果在一个从上测试也必须是ROW模式,还要开启log_slave_updates.根据上面的参数说明按照需求进行调整. 环境:主库 ...

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

    在之前,我分享过一次pt-online-schema-change在线DDL的工具实践记录,在实际使用过程中,发现部门的很多老系统大量使用了触发器,从而无法使用这个工具,非常遗憾!导致很多DDL变更都 ...

  9. 烂泥:mysql帮助命令使用说明

    本文首发于烂泥行天下. 在安装.管理和使用mysql过程中,你是不是需要记忆很多的mysql命令.而且对于新手来说,很不多的命令不知道该如何应用,对于老手来说很多命令时间长了忘记具体的用法. 其实my ...

最新文章

  1. Android开发之移动互联网周刊第二期,不错,推荐给大家
  2. 锐捷RG-S2126G交换机密码恢复实战
  3. 推荐算法炼丹笔记:电商搜索推荐业务词汇表
  4. Redis 实战笔记
  5. UESTC - 1610 递推方程+矩阵快速幂
  6. 大爷去取钱,银行把取款办成存款,大爷拒绝还钱,大家怎么看?
  7. SQLServer日期格式化
  8. 四叶草剧场服务器维修价格,四叶草剧场不合理报酬机制是什么-不合理报酬机制和收益详解-Appfound...
  9. 拥塞避免算法、快重传、快恢复、慢启动
  10. Windows10 添加开始菜单未显示应用到磁贴的方法
  11. 人工智能名片小程序如何开启连锁实体店全新移动电商新时代?
  12. 有关《大道至简》的几点讨论~
  13. 高仿富途牛牛-组件化(一)-支持页签拖拽、增删、小工具
  14. 闲鱼商品理解数据分析平台——龙宫
  15. flask web开发 Set it to True to suppress this warning问题
  16. php00截断原理,burpsuite上传截断及截断原理介绍
  17. 拼多多开店有哪些优势?
  18. Python123分段函数计算
  19. 2021-08-12_简单的处理oracle常见错误ORA-12170、ORA-12541、ORA-12514、
  20. [1-6] 把时间当做朋友(李笑来)Chapter 6 【更多思考】 摘录

热门文章

  1. 点云配准(二)— python open3d ICP方法
  2. LDO稳压器工作原理
  3. 【翻译】Presto: SQL on Everything
  4. 【我的OpenGL学习进阶之旅】计算机视觉 (CV) 、 计算机图形学 (CG) 以及图像处理(DIP)
  5. SAP SD——创建销售订单
  6. 如何建立自己的网站—建站历程分享
  7. 什么是私有云?您应该知道的 6 个优势
  8. Java面试题之:Protoclol Buffer
  9. 萤石开放平台-怎么做账号之间的联动操作?(设备托管)
  10. docker-compose 安装多版本php