MySQL生产中上亿数据大表怎么在线增加一个字段并设定默认值?

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
原文地址:https://www.cnblogs.com/zhouwanchun/p/13141909.html