背景

和上篇pt-osc同样功能的工具gh-ost(使用的是binlog复制数据),目前是为了修改表结构 online DDL

写在前面
(该工具并不是percona toolkit中的,只是为了读者联系ps-ost,才放到这个系列下的)gh-ost是github针对pt-osc用触发器带来的问题而重新设计的一款较新的表结构变更工具。其使用binlog+回放线程来替换掉触发器。https://github.com/github/gh-ost
link

(就是一个二进制文件):

常用命令

gh-ost --max-load=Threads_running=16 --critical-load=Threads_running=32 --chunk-size=1000 --initially-drop-old-table --initially-drop-ghost-table --initially-drop-socket-file --ok-to-drop-table --host=“192.168.66.133” --port=17261 --user=“msandbox” --password=“123456” --assume-rbr --allow-on-master --assume-master-host=192.168.66.133:17261 --database=“test” --table=“test110” --alter=“add column c4 varchar(50) not null default ‘’” --panic-flag-file=/tools/ghost.panic.flag --serve-socket-file=/tools/mysql.sock --verbose --execute #测试

添加之后–execute #执行更改

alter语句和pt-osc一样,主要是需要根据需要设置参数,和注意使用限制

补充:
添加索引:
–alter=“ADD INDEX index_systemId_user_status (AAAA,BBBB);”
添加字段:
–alter=“ADD act_id int(11) DEFAULT NULL COMMENT ‘sdfssdid’”
删除字段:
–alter=“drop column c6”

参数

手动终止
touch /tools/ghost.panic.flag  执行会中断--serve-socket-file=/tools/mysql.sock 参数是自定义的(并不是mysql的)
2020-09-26 21:45:41 INFO Removing socket file: /tools/mysql.sock
-allow-on-master默认是在从库上应用binlog,如果直接在主库上执行,必须设置该参数
-max-load stringstring是状态表达式,当设置多个状态值,用逗号分隔,如'Threads_running=100,Threads_connected=500',当超过该值,迁移暂停等待
-critical-load string与max-load不同的是,当超过该值,迁移直接停止并退出
-chunk-size int每次从原表迭代迁移数据的行数(允许值:100-100000) (默认1000)
-initially-drop-ghost-table在本次操作前删除可能存在的ghost表(可能之前留下的),默认如果存在就中断
-initially-drop-old-table在本次操作前删除old表(可能之前没有删除),默认如果存在中断
-initially-drop-socket-file删除已存在的socket文件
-ok-to-drop-tableDDL完成后自动删除old表
-panic-flag-file string当指定该参数后,如果创建该文件,gh-ost立刻中断退出,不会清理产生的临时表和文件
(异常终止时:需要手动删除临时表)
-exact-rowcount精确的统计表数据行数而不是预估,即使不准确只是影响进度的计算,实际copy行数是由最大值和最小值确定,与其无关。
-serve-socket-file stringsocket文件
-assume-rbr显示告诉gh-ost日志格式是row格式,如果没有该参数,gh-ost每次都会设置row格式并重启复制,需要用户有super权限
-assume-master-host显示告诉gh-ost master地址,如果不提供,gh-ost会根据从库查到master
-host、-portgh-ost默认是作为slave的连接信息,如果使用slave应用日志,这里填写slave的主机信息;如果直接在master上执行,这里就填写master信息,并且必须存在allow-on-master参数,否则就报错退出。
暂停、恢复、终止、延迟切换
gh-ost的--serve-socket-file文件用来监听请求,比如可以动态调整性能方面参数,
也可以进行暂停、恢复gh-ost线程。
#暂停
echo throttle | socat - /tmp/ghost.sock#恢复
echo no-throttle | socat - /tmp/ghost.sock#终止
对应panic-flag-file参数文件,当tmp目录存在该文件立即停止
touch /tmp/ghost.panic.flag#延迟切换(cut-over阶段)
--postpone-cut-over-flag-file=/tmp/ghost.postpone.flag
当设置该参数时cut-over一直延迟切换,直到你删除该文件才进行切换#动态调整性能参数
echo chunk-size=100 | socat - /tmp/ghost.sock

对比之下的好处

gh-ost用异步方式把这修改内容应用到临时表中去。

主库必须产生 Row 格式的二进制日志;
启动 gh-ost 时必须用 --allow-on-master 选项来开启这种模式;

可以在从库上测试负载,也可连接从库在主库上更改

由于使用单线程回放binlog来替换触发器,所以增量DML回放效率不如触发器,因为pt-osc的增量回放并发度是与业务DML并发度相同的,是多线程的。
因此,从实现层面,gh-ost对业务负载敏感度会远高于pt-osc。gh-ost虽然在抗业务负载能力不如pt-osc,但也有其优势,除了没有触发器相关问题之外,还有如下优点受DBA青睐:
对于DDL操作的灵活度掌控,可暂停,可动态修改参数;DBA可以根据执行情况来快速调整预设的参数,可快可慢,实现DDL操作性能和对业务影响的平衡;
更为稳健的切表控制:将-cut-over-lock-timeout-seconds和-default-retries 配合使用,可以对切表进行灵活的控制。避免pt-osc切表异常导致对业务造成严重影响;

运行模式

1、连上从库,在主库上修改
这是 gh-ost 默认的工作模式,它会查看从库情况,找到集群的主库并且连接上去。修改操作的具体步骤是:
在主库上读写行数据;
在从库上读取二进制日志事件,将变更应用到主库上;
在从库上查看表格式、字段、主键、总行数等;
在从库上读取 gh-ost 内部事件日志(比如心跳);
在主库上完成表切换;
如果主库的二进制日志格式是 Statement,就可以使用这种模式。
但从库就必须配成启用二进制日志(log_bin, log_slave_updates),还要设成 Row 格式(binlog_format=ROW),实际上 gh-ost 会在从库上帮你做这些设置。
事实上,即使把从库改成 Row 格式,这仍然是对主库侵入最少的工作模式。2、连上主库
如果没有从库,或者不想在从库上操作,那直接用主库也是可以的。gh-ost 就会在主库上直接做所有的操作。仍然可以在上面查看主从复制延迟。
主库必须产生 Row 格式的二进制日志;
启动 gh-ost 时必须用 --allow-on-master 选项来开启这种模式;3、在从库上修改和测试
这种模式会在从库上做修改。gh-ost 仍然会连上主库,但所有操作都是在从库上做的,不会对主库产生任何影响。在操作过程中,gh-ost 也会不时地暂停,以便从库的数据可以保持最新。
--migrate-on-replica 选项让 gh-ost 直接在从库上修改表。最终的切换过程也是在从库正常复制的状态下完成的。
--test-on-replica 表明操作只是为了测试目的。在进行最终的切换操作之前,复制会被停止。原始表和临时表会相互切换,再切换回来,最终相当于原始表没被动过。主从复制暂停的状态下,你可以检查和对比这两张表中的数据。

选择那个工具

来自网文,读者在线下测试过之后,备份一下更改的表,其实可以根据使用习惯使用

依赖和工具安装

安装go语言
# 安装go依赖包
yum install bison ed gawk gcc libc6-dev make -y# 配置go环境变量
vim ~/.bashrc
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=/usr/local/go/src/github.com/github/gh-ost
# 使环境变量生效
source ~/.bashrc# 解压go安装包
tar -zxvf go1.10.3.linux-amd64.tar.gz -C /usr/local/LT:go1.15.2.linux-amd64.tar 安装gh-ost
tar -zxvf gh-ost-binary-linux-20180527215024.tar.gz -C /usr/local
ln -s /usr/local/gh-ost /usr/bin/gh-ost

本文说明,主要技术内容来自互联网技术大佬的分享,还有一些自我的加工(仅仅起到注释说明的作用)。如有相关疑问,请留言,将确认之后,执行侵权必删

percona toolkit系列(gh-ost)相关推荐

  1. Percona Toolkit工具简介

    系列文章目录 第一章:sql_mode模式 第二章:optimize table.analyze table.alter table.gh-ost 第三章:InnoDB MVCC原理 第四章:sql语 ...

  2. Want to archive tables? Use Percona Toolkit’s pt-archiver--转载

    原文地址:https://www.percona.com/blog/2013/08/12/want-to-archive-tables-use-pt-archiver/ Percona Toolkit ...

  3. mysql 工具_最全Mysql运维工具Percona Toolkit使用案例

    Percona Toolkit简介 Percona Toolkit简称pt工具,是Percona公司开发用于管理MySQL的工具,DBA熟悉掌握后将极大提高工作效率. Percona toolkit有 ...

  4. mysql开启yum search pt-mysql_Centos使用MySQL工具Percona Toolkit

    Centos使用MySQL工具Percona Toolkit 安装Percona Toolkit 的Repo 得以支持直接用yum 安装二进制包 yum install -y https://www. ...

  5. percona toolkit 简介

    os: centos 7.4 db: mysql 5.7 software: toolkit 3.0.8 percona toolkit 是一款percona公司推出的优秀的开源的mysql分析工具. ...

  6. Percona Toolkit安装

    TIPS 本文基于Percona Toolkit 3.2.0,理论支持所有版本. Percona Toolkit是一款MySQL世界里面非常实用的工具套件,本文来探讨如何安装它. 工具列表 pt-al ...

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

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

  8. Percona Toolkit使用之pt-heartbeat

    pt-heartbeat的功能是监控MySQL复制延迟. 用法如下: pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop pt ...

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

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

最新文章

  1. React 项目 -ES6 语法类的继承 (10)
  2. libsigc++库的使用
  3. 静态和动态include
  4. HDU-5877-Weak Pair(树状数组+离散化+dfs)
  5. 硬件创新需要去理解的点(精炼总结)
  6. CentOS8如何修改系统日志的时间戳格式(rsyslog8版本)
  7. python海龟交易策略_Python的海龟交易法
  8. KANO模型,一个能解决你工作中90%烦恼的需求分析神器
  9. wamp安装composer
  10. 12款精品网盘资源搜索网站,只有你想不到没有它搜不到的
  11. 电路设计中如何解决电压跌落
  12. mysql数据库交叉连接_MySQL交叉连接(CROSS JOIN)
  13. FilterConfig的用法是什么?
  14. 使用BERT的两层encoder实现tweet sentiment extraction
  15. 微软张宏江:创新流程是打造创新能力的突破口
  16. 树莓派LED驱动编写
  17. 各种常见的博弈论 + 简单例题
  18. 【SPSS】数据预处理基础教程(附案例实战)
  19. RNA 25. SCI文章中估计组织浸润免疫细胞和基质细胞群的群体丰度(MCP-counter)
  20. Discoverer导出的多层BOM如何拼装为能够直接体现采购层的单层BOM?

热门文章

  1. Excel 模拟form表单提交
  2. mysql组复制(MGR)——背景
  3. HDF5数据库和mysql数据库_hdf5文件格式使用攻略
  4. Docker 容器技术(史上最强总结)
  5. RabbitMQ 延迟队列和消息可靠传递
  6. 集束搜索算法 beam search
  7. 自然数 素数 质数_俄罗斯娃娃素数
  8. 记戴尔科技峰会2017
  9. 【三维激光扫描技术】原理、方法及实验图文教程目录
  10. OPT液态镜头上市,视觉检测实现瞬时对焦