摘  要:正文解说了MySQL
DDL 的标题现状、pt-online-schema-change的行事规律
,并实际运用pt-online-schema-change工具在线修改生产情形下1.6亿级数据表结构。

 

在几个软件生命周期中,大家都知晓,**先前时代的表结构划虚构计是非常重大的**,因为当表数据量意气风发上来后再展开表结构改革危慢性十分的大,何况要操作的时间也正如长。

 

在作者参预的系列中,就曾遇到这么一个标题,首先上去查看了黄金年代晃该表的音讯,本来就有约2亿的数据量,并且每分钟还要并发写入4万条记下,而鉴于那些表有八个字段中期规划过短,导致写入到数据库后,那么些字段的值就直接乱码。因为该表在生育遇到下利用,影响到业务,供给马上改良这些字段长度,何况订正该表结构时不能够停服务。那么什么样解决这种难点啊?

 一、MySQL DDL 的题目现状

发端想了下,收缩那几个表的数据量再DDL,将这么些表一周早前的数据备份到二个一时表,再删除这一个表七日从前的数目。

而在MySQL中在对表进行ddl时,会锁表,当表一点都不大比方小于1w条记下时,操作时间超短,对前面一个影响相当的小,这个时候遇到千万以致上亿级级其他表(保留一日的数据量还会有1.6亿),就能耳熏目染前端采取对表的写操作。

因为近日InnoDB引擎是因而以下步骤来展开DDL的:

1
依据原始表(original_table)的表结商谈DDL语句,新建三个不可知的有时表(tmp_table)

2 在原表上加write lock,阻塞全数更新操作(insert、delete、update等)

3 执行insert into tmp_table select * from original_table

4 rename original_table和tmp_table,最后drop original_table

5 释放 write lock。

大家得以瞥见在InnoDB实行DDL的时候,原表是只可以读无法写的。为此 perconal
推出一个工具 pt-online-schema-change ,其特色是更改进度中不会导致读写阻塞。

     

二、pt-online-schema-change介绍

【工具简要介绍】

pt-osc模仿MySQL内部的改表格局张开改表,但整整顿改进表进度是由此对原始表的正片来成功的,即在改表进度中原始表不会被锁定,并不影响对该表的读写操作。

第黄金年代,osc创造与原始表相像的不分包数据的新表并信守要求开展表结构的修改,然后将原始表中的数据按chunk大小稳步拷贝到新表中,当拷贝完毕后,会活动同有时候改进原始表和新表的名字并默许将原始表删除

【工具安装及应用】

参见下边上面那篇文章

linux下percona-toolkit工具包的设置和采用(超详细版)

【职业原理】

1 创设八个和你要实行 alter 操作的表结构同样的空表。如图:

说明:t_ad_req_log正是原表;

_t_ad_req_log_ol是旧表,这几个表是用来当你试行倒闭的时候,还原回来的原表结构;

_t_ad_req_log_new是新表,那个表正是本次要更改的表。

 图片 1

 

 

2 实行表结构改过,然后从原表中的数据到copy到
表结构改善后的表(即_t_ad_req_log_new)

3 在原表上创设触发器将 copy
数据的长河中,在原表的立异操作更新到新表.

   注意:如若表中早已定义了触发器这一个工具就无法干活了。

4 copy 实现之后,用rename table 新表代替原表,私下认可删除原表。

 

矫正的通令如下:

/usr/local/bin/pt-online-schema-change --user=用户名 --password=密码 --host=127.0.0.1 --port=端口号 --charset=utf8 --nodrop-old-table --alter="modify  media_code varchar(64) DEFAULT NULL COMMENT '当前视频编码' " D=ad_api,t=t_ad_req_log --exec

参数表达:

--user=用户名     指定用户名

--password=用户名     指定用户密码

--port=端口号     指定端口号

--charset=utf8   指定字符编码

--alter=    后面就是接需要修改的内容,比如上面表示的就是修改ad_api数据库t_ad_req_log表的media_code 字段长度为64位

 下边请看一个完整的图:

图片 2

 

 图片 3

 

 

注:如果对percona-toolkit工具安装及运用有疑难的先查看下这两篇作品。

linux下percona-toolkit工具包的设置和行使(超详细版)

pt-online-schema-change解读