阿八博客
  • 100000+

    文章

  • 23

    评论

  • 20

    友链

  • 最近新加了很多技术文章,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

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

欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/jsh/2019/0918/113685.html
作者简介:
杨奇龙,网名“北在南方”,7年DBA老兵,目前任职于杭州有赞科技DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断

一、前言

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

二、使用

2.1 gh-ost 介绍

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

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

行数据在主库上读写读取从库的二进制日志,将变更应用到主库在从库收集表格式,字段&索引,行数等信息在从库上读取内部的变更事件(如心跳事件)在主库切换表

如果你的主库的日志格式是 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 参数说明:

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

操作过程中会生成两个中间状态的表 _b_ghc, _b_gho,其中 _b_ghc 是记录 gh-ost 执行过程的表,其记录类似如下:
--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 可以在命令运行后更改相应的参数,参考下面的例子:
打开限流

关闭限流

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

gh-ost log提示


												

相关文章

暂住......别动,不想说点什么吗?
  • 全部评论(0
    还没有评论,快来抢沙发吧!