8

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

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

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

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

4

1 回答 1

10

如果是生产:

您应该使用pt-online-schema-changePercona Toolkit.

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

pt-online-schema-change 通过创建要更改的表的空副本、根据需要对其进行修改,然后将原始表中的行复制到新表中来工作。复制完成后,它会移开原始表并用新表替换它。默认情况下,它还会删除原始表。

Oak-online-alter-table,它是openark kit

Oak-online-alter-table 允许非阻塞的 ALTER TABLE 操作、表重建和创建表的幽灵。

更改表会更慢,但它不会锁定表。

如果它不是生产并且停机时间可以,请尝试以下方法:

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;
于 2012-12-21T04:54:12.123 回答