千家信息网

MySQL日常大表的DDL操作介绍

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要讲解了"MySQL日常大表的DDL操作介绍",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"MySQL日常大表的DDL操作介绍"吧!大多数的a
千家信息网最后更新 2026年10月31日MySQL日常大表的DDL操作介绍

这篇文章主要讲解了"MySQL日常大表的DDL操作介绍",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"MySQL日常大表的DDL操作介绍"吧!


大多数的alter table操作都会涉及lock-->copy to new table-->rename-->unlock的过程,锁表时间会很长,而且alter table 的process不可被kill,一旦执行就不可回退。
在MySQL5.5和之前版本,在运行的生产环境对大表(超过数百万纪录)执行Alter操作是一件很困难的事情。因为将重建表和锁表,影响用户者的使用。
从MySQL5.6开始,Online DDL特性被引进。他增强了很多种类的Alter Table操作避免拷贝表和锁表,在运行Alter操作的同时允许运行select,insert,update,delete语句。因此在最新版本,我 们可以通过使用ALGORITHM和LOCK选项抑制文件拷贝和加锁。
但是即使在MySQL5.6,仍然有一些Alter操作(增加/删除列,增加/删除主键,改变数据类型等)需要重建表。

虽然mysql5.6对atler table操作有了很大改进,但仍有很多限制,并不建议直接在线上使用。如果线上有DDL的需求我们建议使用以下两种方式:
1、主从架构轮询修改
2、使用在线修改工具online-schema-change
对于第一种方式,使用的前提是,你的数据库架构是一个集群,如果不是,也就无所谓的轮询修改。修改的原理就是利用主从服务,在应用无感知的情况下,得到停机窗口,进行修改。
今天我们着重讲第二种方式,利用第三方工具实现在线大表的DDL操作。这种方式在alter操作更改表结构的时候不用锁定表,也就是说执行alter的时候不会阻塞写和读取操作。

工作原理:
创建一个和你要执行alter操作的表一样的空表结构,执行表结构修改,然后从原表中copy原始数据到表结构修改后的表,当数据copy完成以后就会将 原表移走,用新表代替原表,默认动作是将原表drop掉。在copy数据的过程中,任何在原表的更新操作都会更新到新表,因为这个工具在会在原表上创建触 发器,触发器会将在原表上更新的内容更新到新表。如果表中已经定义了触发器这个工具就不能工作了。

注意点:
1、操作的表必须有主键或唯一索引否则报错。
2、如果表有外键,除非使用 --alter-foreign-keys-method 指定特定的值,否则工具不予执行。
3、当业务量较大时,修改操作会等待没有数据修改后,执行最后的rename操作。因此,在修改表结构时,应该尽量选择在业务相对空闲时,至少修改表上的数据操作较低时,执行较为妥当。
4、由于可能存在一定的风险,在操作之前,建议对数据表进行备份,可以使得操作更安全、可靠。
5、当是主从环境,不在乎从的延迟,则需要加--recursion-method=none参数。当需要尽可能的对服务产生小的影响,则需要加上--max-load参数。

环境搭建:
安装依赖环境
##Install DBI
wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.625.tar.gz
tar -zxvf DBI-1.625.tar.gz
cd DBI-1.625
perl Makefile.PL
make
make install

##Install DBD::Mysql
wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.023.tar.gz
tar -zxvf DBD-mysql-4.023.tar.gz
cd DBD-mysql-4.023
perl Makefile.PL
make
make install

安装percona-toolkit:
##Install percona-toolkit
wget percona.com/get/percona-toolkit.tar.gz
tar -zxvf percona-toolkit-2.2.16.tar.gz
cd percona-toolkit-2.2.16
perl Makefile.PL
make
make install

常用操作:
添加字段
[root@rac1 bin]# ./pt-online-schema-change -uroot -pxxx --alter='add column col1_test int' --execute D=test,t=t_xxx_compensate
修改字段
[root@rac1 bin]# ./pt-online-schema-change -uroot -pxxx --alter='MODIFY COLUMN col1_test TINYINT NOT NULL DEFAULT 0 ' --execute D=test,t=t_xxx_compensate
改字段名
[root@rac1 bin]# ./pt-online-schema-change -uroot -pxxx --alter='CHANGE COLUMN col1_test address varchar(30)' --execute D=test,t=t_xxx_compensate
删除字段
[root@rac1 bin]# ./pt-online-schema-change -uroot -pxxx --alter='drop column address ' --execute D=test,t=t_xxx_compensate
添加索引
[root@rac1 bin]# ./pt-online-schema-change -uroot -pxxx --alter='add key indx_test(col1_test) ' --execute D=test,t=t_xxx_compensate
删除索引
[root@rac1 bin]# ./pt-online-schema-change -uroot -pxxx --alter='DROP INDEX indx_test' --execute D=test,t=t_xxx_compensate

感谢各位的阅读,以上就是"MySQL日常大表的DDL操作介绍"的内容了,经过本文的学习后,相信大家对MySQL日常大表的DDL操作介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

数据 工具 结构 字段 方式 环境 更新 主从 内容 建议 索引 在线 学习 运行 业务 原理 参数 就是 情况 拷贝 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 西安纸贵互联网科技有限公司 互联网与未来科技 互联网科技排名 银优互联网科技有限公司 壕鑫互联网络科技 郑州华宇互联网科技 金融科技和互联网金融 甘肃拓世互联网科技有限公司 互联网汽车科技小镇 玖二柒互联网科技公司待遇 广州慧亚互联网科技怎么样 字节跳动和互联网科技 互联网科技项目计划书材料类 青海科技产业互联网发展 西安小鹰速贷互联网科技有限公司 为客找房互联网科技公司怎么样 厦门江牛科技互联网 北京天晋互联网科技有限公司 深圳互联网科技园地址 有格互联网科技 天津市摩尔互联网科技 金融科技创新监管互联网金融 唐信互联网科技 大连 哈尔滨秒房互联网科技有限公司 福建科技产业互联网发展 北京市互联网新科技 智帮互联网科技公司最近动向 兰石爱特工业互联网科技分公司 北京品多多互联网科技有限公司
0