我的表大小为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”。
这样做会不会造成停机?
答案 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(允许读取)。 如果 请求的并发级别不可用。