我在PHP中一直使用MySQL查询,但是当我尝试LOAD DATA INFILE时,我收到以下错误#1045 - Access denied for user 'user'@'localhost' (using password: YES)
有谁知道这意味着什么?
答案 0 :(得分:170)
我也遇到了这个问题。我不得不在我的SQL语句中添加“LOCAL”。
例如,这会产生权限问题:
LOAD DATA INFILE '{$file}' INTO TABLE {$table}
在您的对帐单中添加“LOCAL”,权限问题应该消失。像这样:
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
答案 1 :(得分:27)
我有这个问题。我四处搜寻,没有找到满意的答案。我在下面总结了我的搜索结果。
访问被拒绝错误可能意味着:
GRANT FILE on *.* to user@'localhost'
);或者,答案 2 :(得分:18)
尝试使用此命令:
load data local infile 'home/data.txt' into table customer;
这应该有效。它适用于我的情况。
答案 3 :(得分:9)
确保您的MySQL用户具有FILE权限。
如果您使用的是共享虚拟主机,则托管服务提供商可能会阻止此操作。
答案 4 :(得分:3)
来自里昂的字符串给了我一个非常好的提示:在Windows上,我们需要使用slach而不是反斜杠。这段代码适合我:
File tempFile = File.createTempFile(tableName, ".csv");
FileUtils.copyInputStreamToFile(data, tempFile);
JdbcTemplate template = new JdbcTemplate(dataSource);
String path = tempFile.getAbsolutePath().replace('\\', '/');
int rows = template.update(MessageFormat
.format("LOAD DATA LOCAL INFILE ''{0}'' INTO TABLE {1} FIELDS TERMINATED BY '',''",
path, tableName));
logger.info("imported {} rows into {}", rows, tableName);
tempFile.delete();
答案 5 :(得分:2)
我遇到了同样的问题,并通过以下步骤解决了这个问题:
对于第3点,您可以参考:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
BR,
AD
答案 6 :(得分:2)
这也发生在我身上,尽管Yamir在他的帖子中描述了所有步骤,但我无法使其发挥作用。
该文件位于/tmp/test.csv中,具有777权限。 MySQL用户有文件权限,我的MySQL版本不允许使用LOCAL选项,所以我被卡住了。
最后我通过运行来解决问题:
sudo chown mysql:mysql /tmp/test.csv
答案 7 :(得分:0)
我发现加载MySQL表可以快速而轻松(我使用的是python / Django模型管理器脚本):
1)创建具有所有列VARCHAR(n)NULL的表,例如:
mysql> CREATE TABLE cw_well2( api VARCHAR(10) NULL,api_county VARCHAR(3) NULL);
2)从csv中删除标头(第一行),然后加载(如果您忘记了LOCAL,则会得到“#1045-用户'user'@'localhost'的访问被拒绝(使用密码:是)”):>
mysql> LOAD DATA LOCAL INFILE "/home/magula6/cogswatch2/well2.csv" INTO TABLE cw_well2 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
-> ;
Query OK, 119426 rows affected, 19962 warnings (3.41 sec)
3)更改列:
mysql> ALTER TABLE cw_well2 CHANGE spud_date spud_date DATE;
mysql> ALTER TABLE cw_well2 CHANGE latitude latitude FLOAT;
瞧瞧!
答案 8 :(得分:0)
如果您使用命令行,我发现很简单
以mysql -u[username] -p[password] --local-infile
登录
然后SET GLOBAL local_infile = 1;
通过use [db_name]
最后是LOAD DATA LOCAL INFILE 'C:\\Users\\shant\\Downloads\\data-1573708892247.csv' INTO TABLE visitors_final_test FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
答案 9 :(得分:0)
答案 10 :(得分:-4)
这可能意味着您为'user'@'localhost'
提供的密码不正确。