MySQL生产中上亿数据大表怎么在线增加一个字段并设定默认值? 一、MySQL8.0版本 如果满足以下条件: 1、不是压缩表 2、不是data dictionary tablespace 3、不是全文索引表 4、不是临时表 5、新增列在最后位置 满足以上条件,可以通过instant方式完成快速加列,即修改metadata信息,代价非常小,秒级完成。 二、MySQL5.6、MySQL5.7 1、可以这么说,虽然支持inplace(不阻塞同时在跑的DML),但还需要rebuild表,代价可能较大并且耗时可能会非常长,也会造成非常严重的主从延迟。 2、因此生产环境还是推荐使用pt-osc/gh-ost等第三方工具进行在线加列。 3、需要注意的是pt-osc会建触发器,如果原先表上本身就有触发器就不能使用了。 4、另外需要注意的是通过第三方工具加列时需要考虑到空间占用问题(影子表及加列过程中产生的binlog)。 5、第三方工具加列同样可能造成主从延迟,因此注意控制速率。 详细ONLINE DDL见:https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html