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
迁移
wing
。t
; 鬼桌是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:由于迁移wing
。t
; 鬼桌是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
迁移
wing
。t
; 鬼桌是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:由于迁移wing
。t
; 鬼桌是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 slave
,start 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是不继续执行的。该参数告诉gh-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 | + - - + ------ + ------ + ------ + ------ + ------ + ------- + 3行于 组(0。00秒)
-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版本信息并退出。
posted on 2017-11-21 11:08 Sunnynanbing 阅读(360) 评论(0) 编辑 收藏 举报