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

gh-ost介绍

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

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

gh-ost原理

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

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

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

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

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

gh-ost 生产字段增删改,加索引不死锁解决方案_第1张图片

弊端

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

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

Centos7安装

      安装环境:

yum install bison ed gawk gcc libc6-dev make -y

      添加环境变量:

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

      重新生效:

source /etc/profile 

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

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

      ghost 下载地址:

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

gh-ost 生产字段增删改,加索引不死锁解决方案_第2张图片

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

      验证安装成功:

gh-ost -version

在这里插入图片描述

使用

      添加索引:

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

      添加字段:

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

你可能感兴趣的:(➤,框架篇)