mysql5.6 在线修改表结构_Mysql5.6支持在线修改表结构

周五研发提出需求,根据工业业务,需要对一个核心业务表,增加字段。费了老劲了。总算成功了。

总结两条:1. 明白了 tmpdir 目录设置的真正意义。

2. 深刻的体会理解了5.6在线修改表结构的过程。同时再一次验证了,支持在线修改表结构的功能。

放心的在线修改吧,什么pt-online-schema-change也弱爆了,不用那么麻烦了

可以直接修改了。

下面是具体的过程:

在修改表结构的过程中,首先对备份的表进行备份:

create table bak_pd_info as select * from productinfo.pd_info ;

该表在备份完成后,只是对表记录等进行了拷贝,不会对表重建索引。

备份完成后大约18.6G,同时备份后会造成所有从库出现延迟的现象。

备份完成后,对bak_info表进行修改表结构,在修改的过程中,会发现/ 目录不断变大,最后空间耗尽,跟新报错如下:

调整了表空间

mysql> set global max_allowed_packet=134217728;

mysql> show global variables like '%tmp%';

mysql> set global tmp_table_size=134217728;

mysql> set global max_heap_table_size=1024*1024*1024

mysql> rename table bak_pd_info to bk_pd_info;

尽管想利用更多的内存,减少临时表,但是发现32G的临时目录远远不够,当备份表bak_pd_info为18.6G时40分钟后,当数据传输估算有3分之二时,即报空间满的错误。

mysql 默认的临时表空间位置 /tmp

所以空间不足是最主要的原因,办法有2个:

1. 增大临时表空间磁盘空间。

2. 修改临时表空间路径,指向较大的空间。 需要重启数据库

本次采用第二种方法:

1. 重启163

tmpdir=/data/mysql

2. 重启172   /173

tmpdir=/data/mysql

166

tmpdir=/data/mysql

replicate_wild_ignore_table=productinfo.%

3. 165 162 181 都重启过。

备份pd_info表。

重启161 所有的从库都指向162

修改表结构。

ALTER TABLE pd_info ADD prokey VARCHAR(150) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL

mysql> ALTER TABLE productinfo.pd_info ADD prokey VARCHAR(150) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

Query OK, 0 rows affected (2 hours 55 min 3.24 sec)

Records: 0  Duplicates: 0  Warnings: 0

发现在更改过正中,原表25.3G,用临时表空间:53G多。 重原状,重启: 161 162   166 165  172 172 163 181

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值