2016-04-04 27 views
1

我有一个查询,这需要时间来执行,因为我导入GEONAMES表MySQL的:未知变量“innodb_lock_wait_timeout = 500”

LOAD DATA LOCAL INFILE 'allCountries.txt' 
INTO TABLE geoname 
CHARACTER SET 'UTF8' 
(geonameid, name, asciiname, alternatenames, latitude, longitude, fclass, fcode, country, cc2, admin1, admin2, admin3, admin4, population, elevation, gtopo30, timezone, moddate); 

但是,如果我执行查询,我总是得到

Lock wait timeout exceeded; try restarting transaction 
[email protected]:~/work/homestead/project/bin$ 

所以我试图增加锁定时间。该文件指出这里:http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html#sysvar_innodb_lock_wait_timeout的CLI-参数为--innodb_lock_wait_timeout=#,但是当我在我的查询设置

mysql -ugeonames -psecret --local-infile=1 --innodb_lock_wait_timeout=500 geonames < geonames_import_data.sql 

,我发现了错误

mysql: unknown variable 'innodb_lock_wait_timeout=500' 

但我的MySQL版本mysql Ver 14.14 Distrib 5.6.19, for debian-linux-gnu (x86_64) using EditLine wrapper应该支持这个设置,对吧?

当我把它像全局和SET GLOBAL innodb_lock_wait_timeout = 500;然后用show variables like '%lock_wait%';读出的值,我发现了正确的价值观

+--------------------------+----------+ 
| Variable_name   | Value | 
+--------------------------+----------+ 
| innodb_lock_wait_timeout | 500  | 
| lock_wait_timeout  | 31536000 | 
+--------------------------+----------+ 

如何使用它的命令行上关系吗?

我的版本:

select @@version // 5.6.19-0ubuntu0.14.04.1 
mysql --version // mysql Ver 14.14 Distrib 5.6.19, for debian-linux-gnu (x86_64) using EditLine wrapper 
+0

如果使用版本5.0和5.6,哪一个(客户端和服务器)? –

+0

不知道,但它大多是相同的5.6 http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_lock_wait_timeout – Musterknabe

+0

而在你的脚本中,你不能使用“SET SESSION innodb_lock_wait_timeout = 500;“ ? –

回答

0

你可能有mysql的旧版本或者至少CLI是旧的,可​​能是从V5.0系列。如果你看看你联系自己的文档,然后就可以看到在innodb_lock_wait_timeout description如下:

名称:innodb_lock_wait_timeout

变量的作用域:全球

动态变量:没有

动态变量no表示变量不能动态设置,只能在my.ini中设置,并且该值只有在服务器重新启动时才会更改开始。如果您尝试动态更改变量,您将收到您描述的错误消息。

+0

嘿,我有v 5.6 - 我只是链接到错误的文档。 5.6表示它是一个动态变量。和mysql -v显示我5.6以及 – Musterknabe

+0

这就是为什么我写了“旧版本的mysql或至少cli是旧的”。 – Shadow