澳门在线威尼斯官方 > 电脑操作 > 6亿级数据表结构,MYSQL可以这样修改亿级数据表

原标题:6亿级数据表结构,MYSQL可以这样修改亿级数据表

浏览次数:195 时间:2019-09-17

摘  要:正文演讲了MySQL DDL 的主题素材现状、pt-online-schema-change的办事规律,并实际上行使pt-online-schema-change工具在线修改生产景况下1.6亿级数据表结构。

MySQL使用pt-online-change-schema工具在线修改1.6亿级数据表结构,ptonlinechangeschema

摘  要:正文演说了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

 

 

注:假诺对percona-toolkit工具安装及运用有疑点的先查看下这两篇小说。

linux下percona-toolkit工具包的安装和动用(超详细版)

pt-online-schema-change解读

 

 

摘 要: 本文演说了 MySQL DDL 的主题材料现状、 pt-online-schema-change 的...

 

本文由澳门在线威尼斯官方发布于电脑操作,转载请注明出处:6亿级数据表结构,MYSQL可以这样修改亿级数据表

关键词:

上一篇:没有了

下一篇:没有了