gh-ost
是 GitHub 开源的一款 MySQL 在线模式迁移工具。它允许你在数据库仍在运行并处理事务的同时,执行非阻塞的 ALTER TABLE 操作。
以下是 gh-ost
的基本用法:
首先,安装 gh-ost
。你可以从 GitHub Release 页面 下载最新版本的二进制文件,或者如果你有 Go 环境,你也可以使用 go get 来安装:
go get github.com/github/gh-ost
然后,你可以使用 gh-ost
命令来进行在线模式迁移。以下是一个基本的示例:
gh-ost \
--max-load=Threads_running=25 \
--critical-load=Threads_running=1000 \
--chunk-size=1000 \
--throttle-control-replicas="mysql1,mysql2" \
--max-lag-millis=1500 \
--user="db_user" \
--password="db_password" \
--host=localhost \
--database="my_database" \
--table="my_table" \
--verbose \
--alter="ADD COLUMN my_column TIMESTAMP NOT NULL" \
--execute
在这个例子中,我们对 "my_table" 表添加了一个新的列 "my_column"。参数 --max-load
和 --critical-load
用于控制负载阈值,在超过设定阈值时会暂停和停止迁移操作。--chunk-size
控制每次复制的行数。--throttle-control-replicas
列出了用于监控复制延迟的从库。--max-lag-millis
设置了允许的最大复制延迟。--alter
指定了要执行的 ALTER TABLE 语句。最后,--execute
表示开始执行迁移。
在使用 gh-ost
时,你需要确保对应的数据库和表存在,而且需要有足够的权限来执行模式更改和数据复制。一般情况下,你应该先在测试环境中尝试和验证迁移操作,在确认无误后再在生产环境中执行。