数据库无锁变更工具gh-ost的使用

运行要求

  • 数据库参数 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

运行脚本封装

参考资料

相关推荐
01_ice4 小时前
MySQL事务
数据库·mysql
旺旺仙贝呦6 小时前
MySQL__MongoDB__Redis 入门
redis·mysql·mongodb
隔窗听雨眠8 小时前
MySQL索引机制深度解析:从B+树原理到高并发查询优化的完整指南
数据库·b树·mysql
我的xiaodoujiao8 小时前
使用PyMySQL模块技术操作MySQL数据库
数据库·python·测试工具·mysql
灯澜忆梦19 小时前
【MySQL17】进阶篇 | InnoDB引擎
数据库·mysql
布莱克60521 小时前
理解数据库聚簇索引:原理、优势与适用场景
数据库·mysql
这个DBA有点耶1 天前
MySQL迁移实战:从mysqldump到专业工具的完整选型指南
数据库·mysql·dba
01_ice1 天前
MySQL内外连接
数据库·mysql
量子炒饭大师1 天前
MySQL 5.7 在 CentOS 7 环境安装:从清理 MariaDB 到初始化与完善配置
数据库·mysql·centos·mariadb
吉甫作诵1 天前
MySQL 8.4.10 二进制包安装教程(Linux 环境)
linux·mysql