Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ 需求 ]支持gh-ost #4

Closed
1 of 3 tasks
hhyo opened this issue Nov 5, 2018 · 11 comments
Closed
1 of 3 tasks

[ 需求 ]支持gh-ost #4

hhyo opened this issue Nov 5, 2018 · 11 comments
Labels
enhancement New feature or request help wanted Extra attention is needed

Comments

@hhyo
Copy link
Owner

hhyo commented Nov 5, 2018

项目地址:GitHub's Online Schema Migrations for MySQL

  • 删除pt-osc相关代码
  • DDL语句执行时可选择通过inception执行还是gh-ost执行,同时增加表体积检测参数,类似inception_osc_min_table_size,超出时选择非gh-ost执行可给出风险提示
  • gh-ost执行(进度展示)、暂停、终止、cut-over
@hhyo hhyo added help wanted Extra attention is needed enhancement New feature or request labels Nov 5, 2018
hhyo added a commit that referenced this issue Jan 3, 2019
@hhyo
Copy link
Owner Author

hhyo commented Jan 3, 2019

关于这一块的实现方式,现在SQL工单已经有DML和DDL的区分,工单内容包含DDL语句的就会被标记为DDL,意味着工单内容可能不是单纯的DDL,有可能是包含DDL+DML语句,这会出现以下场景

  1. DDL工单,选择inception执行,在经过inception的split后,所有语句单独执行
  2. DDL工单,选择gh-ost执行,在经过inception的split后,逐条判断split后的语句类型,如果语句为DDL,则通过gh-ost执行,否则通过inception执行,可保证正常的数据备份

第二种场景中,对于工单中通过gh-ost执行的部分语句如何去实时获取进度并展示,其实可借鉴原有PT-OSC的进度展示。。(不应该删的,哈哈,回头做参考)

@hhyo
Copy link
Owner Author

hhyo commented Jan 4, 2019

部分常用参数

gh-ost \
 --allow-on-master \
 --allow-master-master \
 --assume-master-host="m1:33061" \
 --assume-rbr \
 --initially-drop-ghost-table \
 --initially-drop-socket-file \
 --initially-drop-old-table \
 --chunk-size=1000 \
 --max-load=Threads_running=50 \
 --critical-load=Threads_running=300 \
 --max-lag-millis=3 \
 --user="root" \
 --password="123456" \
 --host=m1 \
 --port=33061 \
 --database="gh_ost" \
 --table="t" \
 --alter="add COLUMN abc2 int" \
 --cut-over=default \
 --exact-rowcount \
 --default-retries=120 \
 --panic-flag-file=/tmp/ghost.panic.flag \
 --postpone-cut-over-flag-file=/tmp/ghost.postpone.flag \
 --verbose \
 --execute

@sky1006
Copy link

sky1006 commented Feb 13, 2019

gh-ost 在RDS上有bug,百G大表有不成功的情况,还是pt-ost稳定

@hhyo
Copy link
Owner Author

hhyo commented Mar 4, 2019

pt-ost和gh-ost将会同时支持,计划在完成 #3 以后开始改造

@flyingonthebed
Copy link
Contributor

flyingonthebed commented Mar 5, 2019

  • pt-osc 在rds上也有问题,rds 1主2从的场景中,在执行change语句时,会有channel的报错。
    原因是rds中复制环境复杂,在主库 show slave hosts; 时会检测到5个从库
    default

  • 实际业务只有2个从库,其余都是阿里云内部的库。并且在主库,执行 show slave status; 也能看到 主库是某个实例的从库。
    所以再 pt-osc 执行的时候会有如下报错,版本pt-osc 3.0.13
    default

  • 3.0.13 代码位置
    default

  • 社区也有类似bug 提交
    https://jira.percona.com/projects/PT/issues/PT-175?filter=allopenissues
    default

  • 2.2.20代码
    default

  • 3.0.4代码
    default

  • 我测试的结论
    rds复制环境复杂,主库也是隐藏库的从库。
    实际测试,2.2.20 版本也会报错,所以使用时请规避在rds 环境中,通过pt-osc使用change语句做 online ddl

@hhyo
Copy link
Owner Author

hhyo commented Mar 5, 2019

使用recursion-method=dsn的形式可以支持rds的变更,可以参考看这篇文章 修改inception来进行调整

目前是否通过pt执行ddl,是按照设置的表体积阈值来自动判断,其实我这边也没有想好是开放给用户提交工单时来手动选择pt-osc、gh-ost、原生执行,还是说按照某些参数自动判断,欢迎大家给出自己的意见

@flyingonthebed
Copy link
Contributor

我觉得可以开启个配置项优先pt还是gh,或者两者都启用、程序判断,也可以关掉。

@hhyo hhyo pinned this issue Mar 8, 2019
@hhyo hhyo changed the title 支持gh-ost [ 需求 ]支持gh-ost Mar 10, 2019
@hhyo hhyo unpinned this issue May 12, 2019
@xcg
Copy link

xcg commented May 15, 2019

该系统是如果启用pt-osc的,我配置文件打开pt-osc,发现没有按pt-osc执行

@hhyo
Copy link
Owner Author

hhyo commented May 15, 2019

目前pt执行不会在界面显示,和直接执行没有区别

@flyingonthebed
Copy link
Contributor

gh-ost 功能进度如何了

@hhyo
Copy link
Owner Author

hhyo commented May 22, 2019

goinception已集成,不再考虑额外支持,后续也许会增加前台进度展示和kill功能

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

4 participants