创build索引时locking超时

我正试图在现有的一个有44,485条logging的表上创build一个新的索引

我正在使用此查询来创build我的新索引

CREATE INDEX index_name ON table_name (field_name); 

每当我运行这个我得到这个超时错误:

 1205 - Lock wait timeout exceeded; try restarting transaction 

这只在我的本地开发机器上,所以没有任何其他进程占用数据库。

有没有一种向现有表添加新索引的首选方法?

谢谢

用InnoDB可以增加locking超时时间:

编辑/etc/my.cnf或/etc/mysql/my.cnf(假设你的开发机器是Linux / Unix)

取消注释(或添加)该行:

 innodb_lock_wait_timeout = 50 

然后将设置更改为更大的数字,比如300.这是在几秒钟内。

重新启动mysql并重新运行您的查询。

或者,您可以转储数据,删除表,使用索引重新创build数据,然后将数据重新导入。或者,您可以使用索引创build新表,并将旧表的数据select到新表中。 在这两种情况下,您都可以将数据导入/复制分成更小的部分(读取:事务),这不会超过超时。