如何在庞大的MYSQL数据库表中插入新列?

时间:2012-12-21 04:50:20

标签: mysql alter-table

我在MYSQL数据库中有这个表,它有大约1000万条记录/行。我想在表格中插入一个新的column。但是,简单的插入列查询对我来说似乎不太适用。

这是我试过的, ALTER TABLE contacts ADD processed INT(11);

我等了大约5个小时,但什么都没发生。有没有办法在如此庞大的表中插入新列?

希望我对我的问题很清楚。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:8)

如果正在制作:

您应该使用Percona Toolkit的{​​{3}}。

  

pt-online-schema-change模仿MySQL内部更改表的方式,但它适用于您希望更改的表的副本。这意味着原始表未被锁定,客户端可能会继续读取和更改其中的数据。

     

pt-online-schema-change的工作原理是创建表的空副本以进行更改,根据需要进行修改,然后将行从原始表复制到新表中。复制完成后,它会移走原始表并将其替换为新表。默认情况下,它也会删除原始表。

pt-online-schema-changeopenark 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;