LOAD DATA LOCAL INFILE 给出错误 The used command is not allowed with this MySQL version
Posted
技术标签:
【中文标题】LOAD DATA LOCAL INFILE 给出错误 The used command is not allowed with this MySQL version【英文标题】:LOAD DATA LOCAL INFILE gives the error The used command is not allowed with this MySQL version 【发布时间】:2012-05-31 01:34:35 【问题描述】:我有一个 php 脚本,它调用 mysql 的 LOAD DATA INFILE
从 CSV 文件加载数据。但是,在生产服务器上,我最终遇到了以下错误:
拒绝用户访问...(使用密码:是)
作为一种快速的解决方法,我将命令更改为LOAD DATA LOCAL INFILE
,这很有效。但是,相同的命令在客户端服务器上失败并显示此消息:
此 MySQL 版本不允许使用的命令
我认为这与服务器变量有关:local_infile = off
,如 here 所述。
请提出不涉及更改服务器设置的解决方法。请注意,安装在同一台服务器上的 phpMyAdmin 实用程序似乎接受 CSV 文件,但我不确定它是否使用 LOAD DATA (LOCAL) INFILE
。
【问题讨论】:
不是命令是你使用的用户的权限。 同一用户可以运行INSERT
查询,但不能运行LOAD DATA INFILE
(拒绝访问)或LOAD DATA LOCAL INFILE
(不允许使用的命令)。
另见:MySQL: Enable LOAD DATA LOCAL INFILE
【参考方案1】:
看看这个权限列表,可以单独添加,IE。可以插入但不更新,也可以删除但不选择等...
ALL [PRIVILEGES] Grant all privileges at specified access level except GRANT OPTION
ALTER Enable use of ALTER TABLE
ALTER ROUTINE Enable stored routines to be altered or dropped
CREATE Enable database and table creation
CREATE ROUTINE Enable stored routine creation
CREATE TEMPORARY TABLES Enable use of CREATE TEMPORARY TABLE
CREATE USER Enable use of CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES
CREATE VIEW Enable views to be created or altered
DELETE Enable use of DELETE
DROP Enable databases, tables, and views to be dropped
EVENT Enable use of events for the Event Scheduler
EXECUTE Enable the user to execute stored routines
FILE Enable the user to cause the server to read or write files
GRANT OPTION Enable privileges to be granted to or removed from other accounts
INDEX Enable indexes to be created or dropped
INSERT Enable use of INSERT
LOCK TABLES Enable use of LOCK TABLES on tables for which you have the SELECT privilege
PROCESS Enable the user to see all processes with SHOW PROCESSLIST
REFERENCES Not implemented
RELOAD Enable use of FLUSH operations
REPLICATION CLIENT Enable the user to ask where master or slave servers are
REPLICATION SLAVE Enable replication slaves to read binary log events from the master
SELECT Enable use of SELECT
SHOW DATABASES Enable SHOW DATABASES to show all databases
SHOW VIEW Enable use of SHOW CREATE VIEW
SHUTDOWN Enable use of mysqladmin shutdown
SUPER Enable use of other administrative operations such as CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, and mysqladmin debug command
TRIGGER Enable trigger operations
UPDATE Enable use of UPDATE
USAGE Synonym for “no privileges”
我认为您有权选择、删除、插入、更新,但不能做其他事情,
使用这个命令:
SHOW GRANTS
在我的情况下,他会告诉你你能做什么。
jcho360> show grants;
+-------------------------------------------------------+
| Grants for jbolivar@localhost |
+-------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'jbolivar'@'localhost' |
+-------------------------------------------------------+
1 row in set (0.00 sec)
【讨论】:
【参考方案2】:遇到了和root一样的问题,然后扔了我一会儿
可能是您使用 compile 设置的服务器设置存在问题
用同一用户测试登录到控制台并尝试加载数据命令
如果遇到同样的错误,请尝试关闭控制台并运行
mysql -u USER -p --local-infile=1 DATABASE
现在尝试再次运行加载数据命令
如果它有效,那么您将需要使用命令行选项重新启动 mysqld 或使用配置选项重新安装
参考(参考适用于 5.0,但适用于 5.5):
http://dev.mysql.com/doc/refman/5.0/en/load-data-local.html
http://dev.mysql.com/doc/refman/5.0/en/mysql-command-options.html#option_mysql_local-infile
【讨论】:
"mysql -u USER -p --local-infile=1 DATABASE" 。这个命令做了所有的伎俩。谢谢。 欢迎您,但其他人通过upvote表示感谢会更干净 非常有用的答案,我自己也遇到过这个问题【参考方案3】:我发现我需要像这样连接到数据库:
$dbh=mysql_connect($server,$dbuser,$dbpass,false,128);
在 flags 参数中传递128
是关键。
请参阅 http://www.php.net/manual/en/mysql.constants.php#mysql.client-flags 以了解有关标志的更多信息。
【讨论】:
以上是关于LOAD DATA LOCAL INFILE 给出错误 The used command is not allowed with this MySQL version的主要内容,如果未能解决你的问题,请参考以下文章
mysql load data local infile问题
使用 LOAD DATA LOCAL INFILE,sysbench 导数速度提升30%