GitHub开源MySQL Online DDL工具gh-ost参数解析

GH-OST版本:1.0.28

-ALLOW-主 - 主

允许GH-OST运行在双主复制架构中,与一般-assume-master-host参数一起使用。

-ALLOW空的特有密钥

允许GH-OST在数据迁移(迁移)依赖的唯一键可以为NULL,默认为不允许为NULL的唯一键。如果数据迁移(迁移)依赖的唯一键允许NULL值,则可能造成数据不正确,请谨慎使用。

-ALLOW上主

允许GH-OST直接运行在主库上。默认GH-OST连接的从库。

- 字符串

ALTER语句的体部分,如“ALTER TABLE wing ADD COLUMN id int not null default 0”,使用gh-ost的-alter参数时,写成-alter ADD COLUMN id int not null default 0即可。

-approve-renamed-columns ALTER

如果你修改一个列的名字(如change column),gh-ost将识别到并且需要提供重命名列名的原因,默认情况下gh-ost是不继续执行的,除非提供-approve-renamed-columns ALTER

例如:

没有添加-approve-renamed-columns ALTER参数,并且修改列名:

gh-ost -user="wing" -host="127.0.0.1" -port=3306 -database="wing" -table="t" -password="wing" -alter="change column col1 c1 int not null default 0" -assume-rbr -execute 2016-12-07 16:39:55致命gh-ost认为ALTER语句重命名列,如下所示:map [col1:col11]; 作为预防,你被要求确认gh-ost是正确的,并提供--approve-renamed-columns,我们都很高兴。或者您可以跳过重命名的列--skip-renamed-columns,在这种情况下列数据可能会丢失

没有添加-approve-renamed-columns ALTER参数,并且修改列名为相同名称:

gh-ost -user="wing" -host="127.0.0.1" -port=3306 -database="wing" -table="t" -password="wing" -alter="change column c1 c1 int not null default 0" -assume-rbr -execute

迁移wingt鬼桌是wing_t_gho 迁移wing-01:3306; 检查wing-02:3306; 在wing-02上执行迁移开始于Wed Dec 07 17:03:22 +0800 2016 chunk-size:1000; max-lag-millis:1500ms; 最大负荷: ; 临界负荷:nice-ratio:0.000000 throttle-additional-flag-file:/tmp/gh-ost.throttle服务于unix socket:/tmp/gh-ost.wing.t.sock Copy:0/3 0.0%; 应用:0; 积压:0/100; 时间:0s(total),0s(copy); 流光标:mysql-bin.000005:62874; 状态:迁移; ETA:N / A复制:0/3 0.0%; 应用:0; 积压:0/100; 时间:1s(合计),1s(复制); 流光标:mysql-bin.000005:64686; 状态:迁移; ETA:N / A复制:3/3 100.0%; 应用:0; 积压:0/100; 时间:1s(合计),1s(复制); 流光标:mysql-bin.000005:64686; 状态:迁移; ETA:截止日期:3/3 100.0%; 应用:0; 积压:1/100; 时间:2s(合计),1s(复制); 流光标:mysql-bin.000005:69035; 状态:迁移; ETA:由于迁移wingt鬼桌是wing_t_gho 迁移wing-01:3306; 检查wing-02:3306; 在wing-02上执行迁移开始于Wed Dec 07 17:03:22 +0800 2016 chunk-size:1000; max-lag-millis:1500ms; 最大负荷: ; 临界负荷:nice-ratio:0.000000 throttle-additional-flag-file:/tmp/gh-ost.throttle服务于unix套接字:/tmp/gh-ost.wing.t.sock复制:3/3 100.0%; 应用:0; 积压:0/100; 时间:2s(合计),1s(复制); 流光标:mysql-bin.000005:69759; 状态:迁移; ETA:到期

添加-approve-renamed-columns ALTER参数,并且修改列名:

gh-ost -user="wing" -host="127.0.0.1" -port=3306 -database="wing" -table="t" -password="wing" -alter="change column col1 c1 int not null default 0" -assume-rbr -execute -approve-renamed-columns ALTER

迁移wingt鬼桌是wing_t_gho 迁移wing-01:3306; 检查wing-02:3306; 在wing-02上执行迁移开始于Wed Dec 07 16:42:16 +0800 2016 chunk-size:1000; max-lag-millis:1500ms; 最大负荷: ; 临界负荷:nice-ratio:0.000000 throttle-additional-flag-file:/tmp/gh-ost.throttle服务于unix socket:/tmp/gh-ost.wing.t.sock Copy:0/3 0.0%; 应用:0; 积压:0/100; 时间:0s(total),0s(copy); 流光标:mysql-bin.000005:41767; 状态:迁移; ETA:N / A复制:0/3 0.0%; 应用:0; 积压:0/100; 时间:1s(合计),1s(复制); 流光标:mysql-bin.000005:43576; 状态:迁移; ETA:N / A复制:3/3 100.0%; 应用:0; 积压:0/100; 时间:1s(合计),1s(复制); 流光标:mysql-bin.000005:43576; 状态:迁移; ETA:截止日期:3/3 100.0%; 应用:0; 积压:1/100; 时间:2s(合计),1s(复制); 流光标:mysql-bin.000005:47927; 状态:迁移; ETA:由于迁移wingt鬼桌是wing_t_gho 迁移wing-01:3306; 检查wing-02:3306; 在wing-02上执行迁移开始于Wed Dec 07 16:42:16 +0800 2016 chunk-size:1000; max-lag-millis:1500ms; 最大负荷: ; 临界负荷:nice-ratio:0.000000 throttle-additional-flag-file:/tmp/gh-ost.throttle服务于unix套接字:/tmp/gh-ost.wing.t.sock复制:3/3 100.0%; 应用:0; 积压:0/100; 时间:2s(合计),1s(复制); 流光标:mysql-bin.000005:48651; 状态:迁移; ETA:到期

-assume-master-host字符串

为GH-OST指定一个主库,格式为 “IP:端口” 或者 “主机名:端口” 默认推荐GH-OST连接从库。

-assume-RBR

确认GH-OST连接的数据库实例的binlog_format = ROW的情况下,可以指定-assume-rbr,这样可以禁止从库上运行stop slavestart slave,执行GH-OST用户也不需要SUPER权限。

-chunk-size int

在每次迭代中处理的行数量(允许范围:100-100000),默认值为1000。

-concurrent,行数

该参数如果为True(默认值),则进行row-copy之后,估算统计行数(使用说明select count(*)方式),并调整ETA时间,否则,开始行副本。

-conf字符串

GH-OST的配置文件路径。

- 关键字加载字符串

一系列逗号分隔的状态名称=值组成,当MySQL的中状态超过对应的数值,GH-OST将会退出。

例如:

-critical-load Threads_connected=20,Connections=1500

指的是当的MySQL中的状态值threads_connected的> 20,连接> 1500的时候,GH-OST将会由于该数据库严重负载而停止并退出。

-critical-load-interval-millis int

当值为0时,当达到-critical-load,GH-OST立即退出。当值不为0时,当达到-critical-load,GH-OST在会-critical-load-interval-millis秒数后,再次进行检查,再次检查依旧达到-critical-load,GH-OST将会退出。

- 切入字符串

选择切过类型:原子/两步,原子(默认)类型的切比是github上的算法,两步采用的是Facebook的OSC的算法。

-cut-over-lock-timeout-seconds int

GH-OST在割接阶段最大的锁等待时间,当锁超时时,GH-OST的割接将重试。(默认值:3)

数据库字符串

数据库名称。

-debug

调试模式。

-default-retries int

各种操作在panick前重试次数。(默认为60)

-discard-外国键

很危险的参数,慎用!

该参数针对一个有外键的表,在幽灵创建鬼表时,并不会为鬼表创建外键。该参数很适合用于删除外键,除此之外,请谨慎使用。

-exact,行数

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

-执行

实际执行alter&migrate表,默认为不执行,仅仅做测试并退出,如果想要ALTER TABLE语句真正落实到数据库中去,需要明确指定-execute

-force-命名割接

如果为true,则“unpostpone | cut-over”交互式命令必须命名迁移的表。

-heartbeat-interval-millis int

GH-OST心跳频率值,默认为500。

-帮帮我

显示GH-OST的帮助信息。

-hooks -hint字符串

任意消息通过GH_OST_HOOKS_HINT注入到钩子中,为了方便起见。

-hooks-path字符串

钩文件存放目录(默认为空,即禁用钩).hook会在这个目录下寻找符合约定命名的钩文件来执行。

-host字符串

数据库的IP /主机名。(默认值:127.0.0.1)。

-initially降鬼表

鬼操作之前,检查并删除已经存在的鬼表。该参数不建议使用,请手动处理原来存在的鬼表。默认不启用该参数,鬼直接退出操作。

-initially滴老表

鬼操作之前,检查并删除已经存在的旧表。该参数不建议使用,请手动处理原来存在的鬼表。默认不启用该参数,鬼直接退出操作。

-initially降插槽文件

GH-OST强制删除已经存在的套接字文件。该参数不建议使用,可能会删除一个正在运行的GH-OST程序,导致DDL失败。

-max-lag-millis int

主从复制最大延迟时间,当主从复制延迟时间超过该值后,GH-OST将采取节流(油门)措施,默认值:1500秒。

最大负载字符串

一系列逗号分隔的状态名=值组成,当MySQL的中状态超过对应的值时,GH-OST将采取节流(油门)措施。

例如:

-max-load Threads_connected=20,Connections=1500

指的是当的MySQL中的状态值threads_connected的> 20,连接> 1500的时候,GH-OST将采取节流(油门)措施。

-migrate-ON-副本

gh-ost的数据迁移(migrate)运行在从库上,而不是主库上。迁移运行在副本上,而不是在主服务器上运行。这将完成对副本的全面迁移,包括切换(而不是复制副本)

小比例浮动

每次块时间段的休眠时间,范围[0.0 ... 100.0]。

例如:

0:每个块时间段不休眠,即一个块接着一个块执行;

1:每行复制1毫秒,则另外休眠1毫秒;

0.7:每行拷贝10毫秒,则另外休眠7毫秒。

-ok到丢弃表

GH-OST操作结束后,删除旧表,默认状态是不删除旧表,会存在_tablename_del表。

-panic-flag-file字符串

当这个文件被创建,GH-OST将会立即退出。

-password字符串

MySQL的密码。

-port int

MySQL的端口。

-postpone-cut-over-flag-file字符串

当这个文件存在的时候,GH-OST的割接阶段将会被推迟,直到该文件被删除。

-安静

静默模式。

-replication-lag-query字符串

检查主从复制延迟的SQL语句,默认gh-ost通过show slave status获取Seconds_behind_master作为主从延迟时间依据。如果使用pt-heartbeat工具,检查主从复制延迟的SQL语句类似于:

SELECT ROUND(UNIX_TIMESTAMP() - MAX(UNIX_TIMESTAMP(ts))) AS delay FROM my_schema.heartbeat;

-serve-socket-file字符串

GH-OST的套接字文件绝对路径。

-serve-tcp-port int

GH-OST使用端口,默认为关闭端口。

-skip-renamed-columns ALTER

如果你修改一个列的名字(如change column),gh-ost将识别到并且需要提供重命名列名的原因,默认情况下gh-ost是不继续执行的。该参数告诉g​​h-ost跳列的数据迁移,让GH-OST把重命名列作为无关紧要的列。该操作很危险,你会损失该列的所有值。

例如:

原始表数据:

mysql >  select  *  from t;
+ - -  + ------ + ---- + ------ + ------ + ------ + ------- +
| id | 名字| c1 | col2 | col3 | col4 | col11 |
+ - -  + ------ + ---- + ------ + ------ + ------ + ------- + 
|  1 | | 22 |    0 |    0 |    0 |     0 |
|  2 | | 22 |    0 |    0 |    0 |     0 |
|  3 | | 22 |    0 |    0 |    0 |     0 |
+ - -  + ------ + ---- + ------ + ------ + ------ + ------- +

执行命令:

gh-ost -user="wing" -host="127.0.0.1" -port=3306 -database="wing" -table="t" -password="wing" -alter="change column c1 col1 int not null default 0" -assume-rbr -execute -skip-renamed-columns ALTER

操作后表数据:

mysql >  select  *  from t;
+ - -  + ------ + ------ + ------ + ------ + ------ + ------- +
| id | 名字| col1 | col2 | col3 | col4 | col11 |
+ - -  + ------ + ------ + ------ + ------ + ------ + ------- + 
|  1 | | |    0 |    0 |    0 |     0 |
|  2 | | |    0 |    0 |    0 |     0 |
|  3 | | |    0 |    0 |    0 |     0 |
+ - -  + ------ + ------ + ------ + ------ + ------ + ------- + 
3000秒)

-stack

添加错误堆栈追踪。

-SWITCH到RBR

让GH-OST自动将从库的binlog_format转换为ROW格式。

表格字符串

表名称。

- 测试上,副本

在从库上测试gh-ost,包括从库上数据迁移(迁移),数据迁移完成后停止从属,原表和ghost表立刻交换而后立刻交换回来。继续保持停止奴隶,使你可以对比两张表。

- 试验 - 对 - 副本 - 跳跃副本停

 当-test-on-replica执行时,该参数表示该过程中不停止从站。

-throttle-additional-flag-file字符串

当该文件被创建后,GH-OST操作立即停止。该参数可以用在多个GH-OST同时操作的时候,创建一个文件,让所有的GH-OST操作停止,或者删除这个文件,让所有的GH-OST操作恢复。

-throttle-control-replicas字符串

列出所有需要被检查主从复制延迟的从库。

例如:

-throttle-control-replica=192.16.12.22:3306,192.16.12.23:3307,192.16.13.12:3308

-throttle-flag-file字符串

当该文件被创建后,GH-OST操作立即停止。该参数适合控制单个GH-OST操作。-throttle-additional-flag-file string适合控制多个GH-OST操作。

-throttle-query字符串

节流查询。每秒钟执行一次。当返回值= 0时不需要节流,当返回值> 0时,需要执行节流操作。该查询会在数据迁移(迁移)服务器上操作,所以请确保该查询是轻量级的。

- 钨

告诉GH-OST你正在运行的是一个钨复制拓扑结构。

用户字符串

MySQL的用户。

-verbose

GH-OST运行时输出详细信息。

-版

输出GH-OST版本信息并退出。

原文地址:https://www.cnblogs.com/Sunnynanbing/p/7872204.html