当前位置:网站首页>Mysql大表修改表结构
Mysql大表修改表结构
2022-08-05 21:23:00 【拐锅】
背景
在项目开发中,如果遇到一张表在后期的迭代中,发现需要进行DDL操作如加索引、增删列以满足需求。
数据量不大
数据量小的时可以直接在线修改表结构,这样影响不大;
数据量较大
但是数据量很大有百万甚至千万级的数据,要如何修改表字段呢?直接执行使用ALTER语句肯定是不现实的,这涉及到锁表以及重建表结构等操作,耗时严重并且影响线上业务。
下面介绍一种方案解决在线修改大数据表而不影响在线业务的方法:
1、备份原始数据
select * from t_goods into outfile ‘/bak/goods.txt’;
2、复制原表物理结构
create table t_goods_new like t_goods;
3、执行表结构修改,这里是增加索引
alter table t_goods_new add index ( good_code );
4、把原表数据导入新表
mysql> insert into t_goods_new select * from t_goods ;
5、删除原表
drop table t_goods;
6、新表重命名原表
rename table t_goods_new to t_goods;
注意:
1、这种方式在数据拷贝-新表改名使用期间,会存在少部分的数据写入存储到旧表中,这里事后需要根据时间节点做一次手动数据同步
2、这种方法仍然会影响业务运行,建议使用在线DDL工具:pt-online-schema-change,且在访问量少时进行
3、大多数的alter table操作都会涉及lock–>copy to new table–>rename–>unlock的过程,锁表时间会很长,而且alter table 的process不可被kill,一旦执行就不可回退。
边栏推荐
- Pytest学习-Fixture参数
- Data Governance Metrics Standard Practice
- 在linux下(CentOS7中)配置MySQL5.7数据库,且实现远程访问
- 技术内幕 | StarRocks Community Champion、阿里云技术专家解读 Optimizer 实现
- 龙蜥社区第十次运营委员会议顺利召开!
- 架构实战营课程学习感受
- 3.【openCV_imread()函数详解】
- What is MySQL table partitioning?
- Introducing Inheritance Abstract Classes
- After importing the web project into idea, the blue dots of the file disappeared (web file resource root path)
猜你喜欢
随机推荐
The best programming language
Pytest学习-Fixture调用方法
At this stage, how do you grasp the opportunities in the metaverse NFG industry?
Configure MySQL5.7 database under linux (CentOS7) and realize remote access
Pytest学习-Fixture参数
软件性能测试有哪些性能指标?可做性能测试的软件检测机构安利
docker安装postgresql数据库
mpls综合实验
如何使用Solidity和Hardhat构建你自己的NFT以及NFT交易市场
如何优雅的给 cp 和 mv 命令添加一个高颜值的进度条
CFdiv2-Chip Move-(线性dp+状态枚举方式)
NOIP2012 improvement group congruence equation problem solution
Information System Project Manager---Chapter 11 Project Risk Management
【opencv图像处理】--4. 低、高通滤波,卷积和各种算子
NOIP2012提高组 同余方程 题解
与第三方iot平台IFTTT&Smartthings&Google对接开发iot物联网云服务
防火墙 端口号 出入站规则 这三者之间的联系
What is MySQL table partitioning?
selenium测试浏览器指纹
工业物联网 —— 新型数据库的召唤









