栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

业务场景下,不影响业务进行的情况下修改大数据量表的表结构做法

业务场景下,不影响业务进行的情况下修改大数据量表的表结构做法

如何不影响业务进行的情况下修改表结构 1.背景

在平时的开发过程中,有些时候因为业务或者需求调整会遇到需要进行对生产线上的表调整结构。一般涉及线上表调整都需要格外注意,调整表结构容易锁表,需要避免影响业务生产。

2.注意事项

1.检查该表是否正在使用中
2.检查该表的数据量级
3.检查数据库版本(不同版本的DDL处理方式不同)
补充:
MySQL各版本,对于DDL的处理方式是不同的,主要有三种:
Copy Table方式: InnoDB最早支持的方式。通过临时表拷贝的方式实现的。新建一个带有新结构的临时表,将原表数据全部拷贝到临时表,然后Rename,完成创建操作。这个方式过程中,原表可读不可写。
Inplace方式:所谓Inplace,也就是在原表上直接进行,不会拷贝临时表。相对于Copy Table方式,这比较高效率。原表可读不可写。
Online方式:MySQL 版本需要>5.6,无论是Copy Table方式,还是Inplace方式,原表只能允许可读不可写。对业务有较大的限制,因此MySQL最新版本中,InnoDB支持了所谓的Online方式DDL。与以上两种方式相比,online方式支持DDL时不仅可以读,还可以写。

3.处理方式

不同的情况有不同的处理方式,根据数据库版本看看DDL方式对业务生产的影响
情况1:表没有使用
处理方式:直接调整即可,因为表没有使用中,即使数据量大也不担心锁表影响业务操作,建议执行前咨询一下运维同学操作的可行性
情况2:表使用中
如果表在使用中的话无论数据量大还是数据量小都建议进行如下操作:

    创建临时表将临时表和正式表的名称互换,使得新数据都进入临时表将正式表的字段长度进行变更。此过程会进行锁表变更完毕后,对临时表和正式表的名称再次互换将临时表期变更间插入的数据,追加插入到正式表中。

这样通过通过临时表的话就可以不影响业务生产,之后将临时表的数据写入回来就可以

sql参考:

-- 1.创建临时表
create table xxx_xxx_tmp like xxx_xxx ;
-- 2.将临时表和正式表的名称互换,使得新数据都进入临时表
RENAME TABLE xxx_xxx TO xxx_xxx _bak;
RENAME TABLE xxx_xxx_tmp TO xxx_xxx ;
-- 3.将正式表的字段长度进行变更。此过程会进行锁表
ALTER TABLE xxx_xxx _bak MODIFY COLUMN a varchar(50);
-- 4.变更完毕后,对临时表和正式表的名称再次互换
RENAME TABLE xxx_xxx TO xxx_xxx_tmp ;
RENAME TABLE xxx_xxx _bak TO xxx_xxx ;
-- 5.将临时表期变更间插入的数据,追加插入到正式表中。
INSERT INTO xxx_xxx (a,b,c) SELECt a,b,c FROM xxx_xxx_tmp;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/735144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号