运行要求
- 数据库参数
binlog_row_image
值为FULL
,变更此参数不需要重启数据库,重新连接客户端即可。 - 数据库剩余空间大于变更表目前占用空间的一倍。
- 被变更的表必须拥有主键或不为空的唯一索引列。
- 交互式命令需要依赖socat,安装命令
apt install -y socat
。
运行参数示例
bash
#!/bin/bash
# 运行基本信息
WORK_PATH=/home/debian/gh-ost
DB_HOST="localhost"
DB_PORT=3306
DB_USER="root"
DB_PASS="root"
DB_NAME="demo"
# SQL里不要带有`字段注释使用'包裹
ALTER_SQL="alter table order_detail_0115 DROP COLUMN gh_ost,ADD COLUMN gh_ost varchar(255) NULL"
# 以下是运行参数,非必要不要修改
$WORK_PATH/gh-ost \
--max-load="Threads_running=100,Threads_connected=600" \
--critical-load="Threads_running=150,Threads_connected=800" \
--chunk-size=3000 \
--initially-drop-old-table \
--initially-drop-ghost-table \
--initially-drop-socket-file \
--ok-to-drop-table \
--allow-on-master \
--allow-master-master \
--default-retries=60 \
--host="$DB_HOST" \
--port=$DB_PORT \
--user="$DB_USER" \
--password="$DB_PASS" \
--database="$DB_NAME" \
--alter="$ALTER_SQL" \
--panic-flag-file=$WORK_PATH/panic.flag \
--postpone-cut-over-flag-file=$WORK_PATH/cut-over.flag \
--serve-socket-file=$WORK_PATH/socket.sock \
--verbose \
--execute
微软云参数
cmd
gh-ost \
--azure \
--assume-master-host=master-server-dns-name \
--master-user="master-user-name" \
--master-password="master-password" \
--assume-rbr \
[-- other parameters you need]
阿里云参数
- 阿里云MySQL数据库自带的有无锁变更功能,控制台提交任务即可。
交互式命令
bash
# 查看状态
echo status | socat - ./socket.sock
# 暂停
echo throttle | socat - ./socket.sock
# 恢复
echo no-throttle | socat - ./socket.sock
#修改参数
echo chunk-size=1000 | socat - ./socket.sock
# 控制切换时机,结合运行参数postpone-cut-over-flag-file实现
rm -rf ./cut-over.flag