如何为表的大小超过4000万行的MySQL枚举类型的列中添加更多的成员?

时间:2019-02-12 11:29:48

标签: mysql enums rds alter aurora

我的表大小为4000万行,我希望通过Aurora MySQL RDS数据库V5.6.10修改表的枚举列以添加更多内容。该表是经常更新的表。有人曾经尝试过更改此类表格吗?如果是这样,您能否详细说明一下体验?

表结构:

CREATE TABLE `tee_sizes` (
id bigint auto_increment,
customer_id bigint,
tee-size enum('small', 'large', 'x-large'),
created_at  timestamp NOT NULL default CURRENT_TIMESTAMP(),
updated_at  timestamp NOT NULL default CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
PRIMARY KEY(id)
) ENGINE=InnoDB AUTO_INCREMENT=36910751 DEFAULT CHARSET=utf8;

我希望在tee-size列中添加“ xx-large”。

这样做会不会造成停机?

1 个答案:

答案 0 :(得分:1)

MySQL 5.6应该允许InnoDB online DDL 在该表上没有停机时间,并且并发查询在更改时仍应对该表起作用。

   ALTER TABLE tee_sizes MODIFY COLUMN `tee-size` enum('small', 'large', 'x-large', 'new-item'),
   ALGORITHM=INPLACE, LOCK=NONE;

ALGORITHM=INPLACE, LOCK=NONE将强制MySQL在 请求的并发级别没有停机。
如果您的MySQL版本未执行,则请求的并发级别不可用,这意味着需要更改ALGORITHM=INPLACE, LOCK=NONE

请参阅demo

由于评论而编辑:

  

等等..那么,这会强制执行任何锁定吗?算法=位置,锁定=无   如果您的服务器将强制MySQL执行(如果允许)而不会停机   MySQL不执行它意味着它不能使用   ALGORITHM = INPLACE,LOCK = NONE此语句令人困惑。

否,它不会锁定manual

的复制/粘贴
  

您可以使用算法和控制DDL操作的各个方面   ALTER TABLE语句的LOCK子句。这些条款放在   语句的末尾,与表和列分开   规格以逗号分隔。 .. 为避免意外制作桌子   不能用于读取,写入或两者均不可用,请在ALTER上指定一个子句   TABLE语句,例如LOCK = NONE`(允许读写)或   LOCK = SHARED(允许读取)。 如果   请求的并发级别不可用。