我在MYSQL数据库中有这个表,它有大约1000万条记录/行。我想在表格中插入一个新的column
。但是,简单的插入列查询对我来说似乎不太适用。
这是我试过的,
ALTER TABLE contacts ADD processed INT(11);
我等了大约5个小时,但什么都没发生。有没有办法在如此庞大的表中插入新列?
希望我对我的问题很清楚。任何帮助将不胜感激。
答案 0 :(得分:8)
如果正在制作:
您应该使用Percona Toolkit
的{{3}}。
pt-online-schema-change模仿MySQL内部更改表的方式,但它适用于您希望更改的表的副本。这意味着原始表未被锁定,客户端可能会继续读取和更改其中的数据。
pt-online-schema-change的工作原理是创建表的空副本以进行更改,根据需要进行修改,然后将行从原始表复制到新表中。复制完成后,它会移走原始表并将其替换为新表。默认情况下,它也会删除原始表。
或pt-online-schema-change是openark kit
oak-online-alter-table允许非阻塞ALTER TABLE操作,表重建和创建表的ghost。
更改表会更慢,但它不会锁定表。
如果不是生产并且停机时间还可以,请尝试以下方法:
CREATE TABLE contacts_tmp LIKE contacts;
ALTER TABLE contacts_tmp ADD COLUMN ADD processed INT UNSIGNED NOT NULL;
INSERT INTO contacts_tmp (contact_table_fields) SELECT * FROM contacts;
RENAME TABLE contacts_tmp TO contacts, contacts TO contacts_old;
DROP TABLE contacts_old;