gh-ost 生产字段增删改,加索引不死锁解决方案

news/2024/5/20 13:05:21 标签: java, 服务器, 数据库

gh-ost介绍

      在做功能迭代的时候,我们总会遇到生产的数据库表结构不适合的时候。往往我们要添加字段,添加索引,修改字段等操作。但是如果生产的数据量是很大的,我们对表结构进行修改的时候会引起死锁,甚至会引起宕机。

      这个时候,有一种解决方案,gh-ost,可以在不发生死锁的前提下,把数据表结构修改成功。

gh-ost原理

      1.gh-ost会根据我们要修改表结构内容,把原表先新建一张 “源表名_gho”的幽灵表。

      2.把原表中的数据分批次插入的ghost表中。默认是1000条一次,可以由chunk-size设置。

java">insert into ghost select * from tab where id >= batchminid and id< batchmin_id+1000;

      3.对于增量、修改、删除的数据,会由另外一个线程读取binlog,捕捉dml。并在ghost表中执行。

      4.最后 cut-Over,锁定原表,待binlog完全追上,进行rename操作。

在这里插入图片描述

弊端

  • binlog应用优先级会高于原表的批量复制。如果原表的增删改非常频繁,原表压力一直很大,那么就会一直跟踪binlog,复制进度会进展很慢,甚至无法完成。

  • 操作完成后,原表会被重命名为*_del表,需要手动删除。

Centos7安装

      安装环境:

java">yum install bison ed gawk gcc libc6-dev make -y

      添加环境变量:

java">vi /etc/profile 

#GO
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=/usr/local/go/src/github.com/github/gh-ost

      重新生效:

java">source /etc/profile 

go1.9.linux-amd64.tar.gz下载地址

java">tar -zxvf /root/go1.9.linux-amd64.tar.gz -C /usr/local/

      ghost 下载地址:

gh-ost-binary-linux-20181016015113.tar.gz(2.8 MB)

在这里插入图片描述

java">tar -zxvf /root/gh-ost-binary-linux-20181016015113.tar.gz -C /usr/local
ln -s /usr/local/gh-ost /usr/bin/gh-ost

      验证安装成功:

java">gh-ost -version

在这里插入图片描述

使用

      添加索引:

java">gh-ost 
-aliyun-rds=true 
-debug 
-initially-drop-ghost-table 
-initially-drop-old-table 
-allow-on-master 
-alter="ADD INDEX `index_systemId_user_status` (`AAAA`,`BBBB`);" 
-assume-master-host=rm-bp1q9yj79ij4u27cg.mysql.rds.aliyuncs.com 
-database="moneysystem" 
-host="rm-VVVVVVVV.mysql.rds.aliyuncs.com" 
-port=3306 
-password="DDDDDFFFDDD" 
-table="t_EEEEEEE_tail" 
-tungsten 
-user="Root" 
-assume-rbr 
-execute

      添加字段:

java">gh-ost 
-aliyun-rds=true 
-debug 
-initially-drop-ghost-table 
-initially-drop-old-table 
-allow-on-master 
-alter="ADD `act_id` int(11) DEFAULT NULL COMMENT 'sdfssdid'" 
-assume-master-host=rm-werewrwerewwer.mysql.rds.aliyuncs.com 
-database="moneyystem" 
-host="rm-VVVVV.mysql.rds.aliyuncs.com" 
-port=3306 
-password="AAA" 
-table="t_ct" 
-tungsten 
-user="sdfs" 
-assume-rbr 
-execute

http://www.niftyadmin.cn/n/1145807.html

相关文章

三问百度:是否在干预搜索结果?

提供信息搜索服务的网站正在遭遇信任危机。尽管有44.71%的网民经常使用搜索引擎来查看新闻与信息&#xff0c;但他们却无法知道自己搜到的内容是否遵循着客观、公平、公正的原则——也许&#xff0c;一些称赞企业及其产品的网页或新闻是花钱买来的&#xff0c;而另一些关于批评…

PAT甲级1035

1035. Password (20) 时间限制400 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, YueTo prepare for PAT, the judge sometimes has to generate random passwords for the users. The problem is that there are always some confusing passwords since it…

Mysql:Incorrect string value: ‘\xF0\x9F\x8D\x83\xF0\x9F...‘ for column 问题解决方案

一、前言 今天生产上出现一个问题&#xff0c;更新数据库的时候&#xff0c;没有更新成功&#xff0c;经过定位问题&#xff0c;发现是update的sql报错了。 错误信息是&#xff1a; Mysql&#xff1a;Incorrect string value: \xF0\x9F\x8D\x83\xF0\x9F... for column 二、原…

评论:仅靠政策支持难以壮大TD产业

-本报记者 高骥远经历了奥运的大考、工信部网站发布资费套餐标准&#xff0c;近期又有二期网络招标的即将启动&#xff0c;但中移动在发展TD上还是差强人意。根据中移动官方公布的数据显示&#xff0c;目前TD用户共17.5万&#xff0c;其中测试用户10.4万&#xff0c;自购机用户…

PAT甲级1077

1077. Kuchiguse (20) 时间限制100 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者HOU, QimingThe Japanese language is notorious for its sentence ending particles. Personal preference of such particles can be considered as a reflection of the speake…

【分库分表】sharding-jdbc + spring boot对大表进行分库分表

一、前言 最近小编跳槽了,刚好入职了一家移动互联网公司。非常的幸运。来新公司后的第一个项目就是对通知服务进行优化改进,其中,一个业务就是当用户登录的时候,就会登录访问通知表,根据用户id加载通知信息。由于通知量已经上亿了,在查询的时候是非常慢的。 以前的项目中…

思科从边沿业务跻身软件市场

思科需要重新定位成为软件企业&#xff0c;但在企业协作市场&#xff0c;谷歌与微软已先行一步。思科要想在这个市场有所作为&#xff0c;就必须加倍努力 8月27日&#xff0c;思科宣布签署了2.15亿美元收购PostPath的协议。这家网络基础设备巨头在扩展商业应用软件业务方面又迈…

【Java】Jvm调优——结合项目总结调优心得

一、前言 java 做到一定程度就会对jvm有一定的了解,了解运行时内存是什么样的,了解类加载机制等等。如果要做的更好的话,就要了解jvm性能调优的内容了。在这篇博客,小编结合自己的项目经验,对jvm调优的一些技巧做一些总结。当然现在的水平也是有一定限制的,希望有问题的地…