数据库无锁变更工具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

运行脚本封装

参考资料

相关推荐
身如柳絮随风扬8 小时前
MySQL核心知识
数据库·mysql
551只玄猫9 小时前
【数据库原理 实验报告1】创建和管理数据库
数据库·sql·学习·mysql·课程设计·实验报告·数据库原理
q5431470879 小时前
MySQL SQL100道基础练习题
数据库·mysql
zhoupenghui16810 小时前
mysql 中如果条件where中有or,则要求or两边的字段都必须有索引,否则不能用到索引, 为什么?
数据库·mysql·索引
eggwyw11 小时前
完美解决phpstudy安装后mysql无法启动
数据库·mysql
java修仙传11 小时前
MySQL 事务隔离级别详解
数据库·mysql·oracle
Irissgwe11 小时前
MySQL存储过程和触发器专题
数据库·mysql·oracle
skiy14 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
创世宇图14 小时前
Alibaba Cloud Linux 安装生产环境-mysql
linux·mysql
重庆小透明15 小时前
【搞定面试之mysql】第一篇:mysql的优化和索引
mysql·面试·职场和发展