当前位置: 首页 > news >正文

gh-ost概述(二实践)

注意:只适用于拥有主键或者唯一键的表,不存在触发器的表
一、gh-ost的安装部署
0、yum -y install golang
1、进入官网GitHub - github/gh-ost: GitHub’s Online Schema-migration Tool for MySQL
2、下载gh-ost-master.zip包
3、解压unzip gh-ost-master.zip
4、cd gh-ost-master
5、./build.sh 命令执行后,默认将安装包存放在/tmp/gh-ost-release下
6、cp /tmp/gh-ost-release/gh-ost-binary-linux-amd64-20230809165421.tar.gz /soft
7、cd /soft
8、tar -zxvf gh-ost-binary-linux-amd64-20230809165421.tar.gz 最终在当前目录下解压出gh-ost的命令文件
二、gh-ost在master/master-master上的应用
会在主库上使用ghost的命令。
1、增加列

./gh-ost --max-load=Threads_running=10 \
--critical-load=Threads_running=95 \
--chunk-size=1000 \
--initially-drop-socket-file \
--ok-to-drop-table \
--host="数据库主机IP" \
--port=3307 \
--user="user" \
--password="passwd" \
--assume-rbr \
--allow-on-master \
--assume-master-host=主库IP:端口 \
--database="数据库名" \
--table="表名" \
--panic-flag-file=/tmp/ghost.panic.flag
--alter="add column c6 varchar(50) not null default ''"   \
--serve-socket-file=/tmp/ghost.sock --verbose --execute 

解释:

2、增加索引

./gh-ost --max-load=Threads_running=10 \
--critical-load=Threads_running=95 \
--chunk-size=100 \
--initially-drop-socket-file \
--ok-to-drop-table \
--host="数据库主机IP" \
--port=3307 \
--user="user" \
--password="passwd" \
--assume-rbr \
--allow-on-master \
--assume-master-host=主库IP:端口 \
--database="数据库名" \
--table="表名" \
--alter="add index index_(id,createTime)"   \
--serve-socket-file=/tmp/ghost.sock --verbose --execute 

3、修改列名和类型
因为不区分大小写,fontSize的字段名,还是原样,类型发生了变化

./gh-ost --max-load=Threads_running=10 \
--critical-load=Threads_running=95 \
--chunk-size=100 \
--initially-drop-socket-file \
--ok-to-drop-table \
--host="数据库主机IP" \
--port=3307 \
--user="user" \
--password="passwd" \
--assume-rbr \
--allow-on-master \
--assume-master-host=主库IP:端口 \
--database="数据库名" \
--table="表名" \
--alter="change fontSize fontSize bigint"   \
--serve-socket-file=/tmp/ghost.sock --verbose --execute

4、删除列

./gh-ost --max-load=Threads_running=10 \
--critical-load=Threads_running=95 \
--chunk-size=100 \
--initially-drop-socket-file \
--ok-to-drop-table \
--host="数据库主机" \
--port=3307 \
--user="user" \
--password="passwd" \
--assume-rbr \
--allow-on-master \
--assume-master-host=数据库主库IP:端口 \
--database="数据库名" \
--table="表名" \
--alter="drop repetition"   \
--serve-socket-file=/tmp/ghost.sock --verbose --execute

三、gh-ost在master-slave上的应用
会在slave库上运行ghost命令
1、删除列

./gh-ost --max-load=Threads_running=10 \
--critical-load=Threads_running=95 \
--chunk-size=100 \
--initially-drop-socket-file \
--ok-to-drop-table \
--host="slave数据库主机IP" \
--port=3307 \
--user="user" \
--password="passwd" \
--database="数据库" \
--table="表名" \
--alter="drop bookCode"   \
--serve-socket-file=/tmp/ghost.sock --verbose --execute

四、其它补充
1、gh-ost 中 Mysql参数的影响
innodb_autoinc_lock_mode=0 传统模式
innodb_autoinc_lock_mode=1 不会因为row lock 和 auto-inc锁产生死锁问题
innodb_autoinc_lock_mode=2 间隙模式
当innodb_autoinc_lock_mode设置为1时,表示使用连续模式(consecutive mode)来锁定自增列。在这种模式下,InnoDB会锁住整个自增列范围,以确保在插入新记录时不会发生重复值。
具体来说,在连续模式下,当插入新数据时,InnoDB会获取一个全局的互斥锁(auto-inc lock),然后分配下一个可用的自增值。这样可以保证在多个并发插入操作中,每个插入的自增值都是唯一且递增的。
需要注意的是,使用连续模式可能会导致并发插入操作的性能瓶颈,因为每次插入都需要获取全局锁。如果您的应用程序有高并发的写入需求,您可以考虑将innodb_autoinc_lock_mode设置为2(间隙模式)或0(传统模式),以提高并发性能。
总之,innodb_autoinc_lock_mode=1表示InnoDB引擎将使用连续模式来锁定自增列,确保生成唯一且递增的自增值,但可能对并发性能有一定的影响。

2、gh-ost与其它方式的DDL同时作用一张表
在gh-ost的对某表执行ddl期间,不可采用其它方式对表进行DDL,因为其它的DDL操作将不会生效。

3、gh-ost DDL的另类等待
存在大量写的事务时,不可执行gh-ost。因为不采取其它方式干预的情形下,gh-ost会一直等待,等待事务的完成。原因是gh-ost的binlog应用优先于row copy,且apply binlog是单线程,导致row copy数不发生变化。

相关文章:

gh-ost概述(二实践)

注意:只适用于拥有主键或者唯一键的表,不存在触发器的表 一、gh-ost的安装部署 0、yum -y install golang 1、进入官网GitHub - github/gh-ost: GitHub’s Online Schema-migration Tool for MySQL 2、下载gh-ost-master.zip包 3、解压unzip gh-ost-mast…...

临时文档3

Set接口 说一下 HashSet 的实现原理? HashSet 是基于 HashMap 实现的,HashSet的值存放于HashMap的key上,HashMap的value统一为PRESENT,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调…...

【OpenGauss源码学习 —— 执行算子(SeqScan算子)】

执行算子(SeqScan算子) 执行算子概述扫描算子SeqScan算子ExecInitSeqScan函数InitScanRelation函数ExecSeqScan函数 总结 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和学术成果,力求遵…...

Postman中,既想传递文件,还想传递多个参数(后端)

需求:既想传文件又想传多个参数可以用以下方式实现...

跨境干货|TikTok变现的9种方法

在这个流量为王的时代,哪里有流量,哪里就有商机。TikTok作为近几年最火爆的社媒平台之一,在全球范围都具有一定的影响力。随着TikTok Shop等商务功能加持上线,更是称为跨境电商的新主场之一。 在这样的UGC平台,想要变…...

Grafana 曲线图报错“parse_exception: Encountered...”

问题现象 配置的Grafana图报错如下: 原因分析 点开报错,可以看到报错详细信息,是查询语句的语法出现了异常。 变量pool的取值为None 解决方案 需要修改变量pool的查询SQL,修改效果如下: 修改后&#x…...

idea中提示Unsupported characters for the charset ‘ISO-8859-1‘

application.properties中文注释拉黄线 ,提示Unsupported characters for the charset ISO-8859-1 解决办法: 注意: 改完之后之前输入的中文就变成“ ???”了,建议备份一下 1、打开setti…...

通过signtool进行数字签名和验证签名

(一)如何签名 SignTool.exe (Sign Tool) - .NET Framework | Microsoft Learn Using SignTool to Sign a File - Win32 apps | Microsoft Learn 签名命令行: signtool.exe sign /f xxx.pfx /t http://timestamp.digicert.com yyy.dll xx…...

geeemap学习总结(2)——地图底图应用

1. 加载库中已有图层 import os os.environ[HTTP_PROXY] http://127.0.0.1:8001 os.environ[HTTPS_PROXY] http://127.0.0.1:8001 # 设置中心位置/地图层级/图层加载高度,加载图层 import geemap Mapgeemap.Map(center[40, 100], zoom4, height600) Map# 添加已经…...

flutter 手写日历组件

先看效果 直接上代码 calendar_popup_view.dart import package:flutter/material.dart; import package:intl/intl.dart;import custom_calendar.dart; import hotel_app_theme.dart;class CalendarPopupView extends StatefulWidget {const CalendarPopupView({required th…...

C++动态规划经典试题解析之打家劫舍系列

1.前言 力扣上有几道与打家劫舍相关的题目,算是学习动态规划时常被提及的经典试题,很有代表性,常在因内大大小小的社区内看到众人对此类问题的讨论。 学习最好的方式便是归纳总结、借鉴消化,基于这个目的,本文对此类问题也做了讲解,在一些优秀思想的基础上添加了个人观…...

24届近5年东南大学自动化考研院校分析

今天给大家带来的是东南大学控制考研分析 满满干货~还不快快点赞收藏 一、东南大学 学校简介 东南大学是我国最早建立的高等学府之一,素有“学府圣地”和“东南学府第一流”之美誉。东南大学前身是创建于1902年的三江师范学堂。1921年经近代著名教育家…...

electron、electron-forge 安装

npm修改了registry,安装依旧无效 使用cnpm 倒是可以解决,但是 npx electron-forge import 中 Installing dependencies 使用的是npm 给出一次性解决方案: step1:切换npm的下载源,可以使用nrm 进行管理,有…...

go的strings用法

strings 是 Go 语言标准库中提供的一个包,用于处理字符串相关的操作。这个包包含了许多函数,可以用于字符串的切割、拼接、替换、查找等操作。下面是一些常用的 strings 包函数和用法示例: package mainimport ("fmt""string…...

echo用法、linxu课堂练习题、作业题

一、课堂练习 练习一: 4、普通用户修改密码: root修改密码: 5、修改主机名:hostnamectl hostname 主机名 查看:hostnamectl或者cat etc/hostname 练习二: 1、 mkdir /root/html touch /root/html/index.…...

WordPress使用【前端投稿】功能时为用户怎么添加插入文章标签

在使用Wordpress做前端投稿功能的时候,可能需要用户填写文章标签,在插入文章的时候很多人不知道怎么把这些标签插入进去,下面这篇文章来为大家带来WordPress使用前端投稿功能时插入文章标签方法。 在Wordpress里 wp_insert_post 此函数的作…...

第二章:CSS基础进阶-part1:CSS高级选择器

文章目录 一、 组合选择器二、属性选择器三、伪类选择器1、动态伪类选择器2、状态伪类选择器3、结构性伪类选择器4、否定伪类选择器 一、 组合选择器 后代选择器:E F子元素选择器: E>F相邻兄弟选择器:EF群组选择器:多个选择器…...

js 正则表达式 限制input元素内容必须以abc开头,123结尾

要通过正则表达式验证一个输入元素的内容是否以"abc"开头且以"123"结尾,您可以使用 ^ 表示开头,$ 表示结尾,以及适当的字符类或具体字符。以下是一个示例正则表达式: var regex /^abc.*123$/;上面的正则表达…...

Linux下安装nginx (tar解压版安装)

Linux下安装nginx (tar安装) 1、下载nginx 官方下载地址https://nginx.org/en/download.html 在这里插入图片描述 2.解压 解压‘nginx-1.16.1.tar.gz’到指定目录(/usr/local/myWorkSpace)并且重命名 命令: tar -xvf nginx-1.16.1.tar.gz …...

不同组件之间相互传递信息的方式(拓展知识)

文章目录 🐒个人主页🏅JavaEE系列专栏📖前言:🏨补充知识:不同组件之间通过get()方式传递信息 🎀父组件与子组件之间的信息交互 $emit 方法🏅父组件给子组件发…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

【机器视觉】单目测距——运动结构恢复

ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛&#xf…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...