我正在尝试遵循该 SO答案的建议,以将列添加到具有约150k行的现有表中。 它在我的MacBook Pro的本地主机上运行。 这是我正在MySQL命令行中使用source命令运行的脚本:
# Create a temporary new table.
CREATE TABLE psf_new LIKE psf;
ALTER TABLE psf_new ADD COLUMN filter varchar(25) AFTER filename;
ALTER TABLE psf_new ADD COLUMN aperture varchar(50) AFTER filter;
# Add some of the indexes we'll need in the future.
CREATE INDEX filename_index ON psf_new (filename);
CREATE INDEX filter_index ON psf_new (filter);
CREATE INDEX aperture_index ON psf_new (aperture);
CREATE INDEX psf_x_center_index ON psf_new (psf_x_center);
CREATE INDEX psf_y_center_index ON psf_new (psf_y_center);
# Copy over the existing data from the old table.
INSERT INTO psf_new (
id,
filename,
psf_x_center,
psf_y_center,
model_x_center,
model_y_center,
psf_flux, sky,
psf,
model_fraction) SELECT * FROM psf;
# Rename and drop.
RENAME TABLE psf_new TO psf, psf TO psf_old;
DROP TABLE psf_old;
一切正常,直到命中INSERT语句,然后才停止。 我知道这是一项昂贵的操作(尝试此操作之前我立即进行的数据库转储为500M)。 但是我没有看到MySQL进程或守护进程有任何CPU活动,没有足够的可用内存,并且IO活动最少(我从OSX活动监视器中获得了所有这些活动)。
当我使用CTRL-C中止查询并检查内容时,我可以看到我的新表已创建但没有数据。 我用SELECT count(id) FROM psf_new; 。 当我尝试在psf表上运行相同的命令时,我得到一小撮CPU和IO,然后什么也没有发生,除非再次按下CTRL-C,否则不会返回CLI提示符。
更新:
因此,令人尴尬的是,解决方案是重新启动计算机。 事情似乎正在按预期进行。 如果任何人都可以提供关于可能发生的情况的任何见解,例如需要回滚的陈旧事务之类的东西,将不胜感激。