mysql大表在线ddl工具gh-ost
gh-ost依赖bin日志,所有mysql必须开启bin-log
特点
- 无触发器
- 轻量级
- 可暂停
- 动态可控
- 可审计
- 可测试
- 可靠
常用参数
参数名称 | 说明 |
---|---|
--max-load | 执行过程中,gh-ost 会时刻关注负载情况,负载阀值是使用者自己定义,比如数据库的最大连接数,如果超过阀值,gh-ost 不会退出,会等待到负载在阀值以下继续执行。 |
--critical-load | 这个指的是 gh-ost 退出阀值,当负载超过这个阀值,gh-ost 会停止并退出 |
--chunk-size | 迁移过程是一步步分批次完成的,这个参数是指事务每次提交的行数,默认是 1000。 |
--max-lag-millis | 会监控从库的主从延迟情况,如果延迟秒数超过这个阀值,迁移不会退出,等待延迟秒数低于这个阀值继续迁移。 |
--throttle-control-replicas | 和--max-lag-millis 参数相结合,这个参数指定主从延迟的数据库实例。 |
--switch-to-rbr | 当 binlog 日志格式不是 row 时,自动转换日志格式 |
--initially-drop-ghost-table | gh-ost 执行前会创建两张 xx_ghc 和 xx_gho 表,如果这两张表存在,且加上了这个参数,那么会自动删除原 gh 表,从新创建,否则退出。xx_gho 表相当于老表的全量备份,xx_ghc 表数据是数据更改日志,理解成增量备份。 |
--initially-drop-socket-file | gh-ost 执行时会创建 socket 文件,退出时不会删除,下次执行 gh-ost 时会报错,加上这个参数会删除老的 socket 文件,重新创建。 |
--ok-to-drop-table | go-ost 执行完以后是否删除老表,加上此参数会自动删除老表。 |
--host | 数据库实例地址。 |
--port | 数据库实例端口。 |
--user | 数据库实例用户名。 |
--password | 数据库实例密码。 |
--database | 数据库名称。 |
--table | 表名。 |
--verbose | 执行过程输出日志。 |
--alter | 操作语句。 |
--cut-over | 自动执行 rename 操作。 |
--debug | 输出详细日志。 |
--panic-flag-file | 这个文件被创建,迁移操作会被立即终止退出。 |
--execute | 如果确定执行,加上这个参数。 |
--allow-on-master | 整个迁移所有操作在主库上执行,也就是上文介绍的第二种方案:在主库执行。 |
--throttle-flag-file | 此文件存在时操作暂停,删除文件操作会继续。 |
Master执行例子
gh-ost \
--ok-to-drop-table \
--initially-drop-ghost-table \
--initially-drop-socket-file \
--host="192.168.109.245" \
--port=3306 \
--user="root" \
--password="123456"\
--database="ucs" \
--table="tb_sms" \
--verbose \
--alter="ADD KEY idx_receiver (`receiver`);" \
--panic-flag-file=/tmp/ghost.panic.flag \
--allow-on-master \
--throttle-flag-file /tmp/1.log \
--execute