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

运行脚本封装

参考资料

相关推荐
web1309332039810 分钟前
Mysql的安装配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
数据库·mysql
鹅鹅鹅呢15 分钟前
mysql 登录报错:ERROR 1045(28000):Access denied for user ‘root‘@‘localhost‘ (using password Yes)
android·数据库·mysql
在人间负债^18 分钟前
假装自己是个小白 ---- 重新认识MySQL
android·数据库·mysql
元亓亓亓35 分钟前
MySQL--day1--数据库概述
数据库·mysql
筱宇***1 小时前
Mac的web服务器
mysql·nginx·macos·php
天空之城夢主2 小时前
shell 编程之正则表达式与文本处理器
数据库·mysql·正则表达式
进击的CJR3 小时前
MySQL 8.0 OCP 英文题库解析(三)
android·mysql·开闭原则
JhonKI4 小时前
【MySQL】变更缓冲区:作用、主要配置以及如何查看
数据库·mysql
老李不敲代码5 小时前
榕壹云打车系统:基于Spring Boot+MySQL+UniApp的开源网约车解决方案
spring boot·mysql·微信小程序·uni-app·软件需求
杨凯凡6 小时前
MySQL入门指南:环境搭建与服务管理全流程
数据库·mysql