访问被拒绝在MySQL中加载数据
我一直在PHP中使用MySQL查询,但是当我尝试LOAD DATA INFILE时,出现以下错误#1045 - Access denied for user 'user'@'localhost' (using password: YES)
有谁知道这意味着什么?
我也遇到了这个问题。 我不得不在我的SQL语句中添加“LOCAL”。
例如,这给了权限问题:
LOAD DATA INFILE '{$file}' INTO TABLE {$table}
添加“本地”您的声明和权限问题应该消失。 像这样:
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
我有这个问题。 我四处搜寻,没有find满意的答案。 我在下面总结了我的search结果。
访问被拒绝的错误可能意味着:
- 'user'@'localhost'没有FILE权限(GRANT FILE在数据库。*到user @'localhost'IDENTIFIED BY'password'); 要么,
- 你正在加载的文件在运行mysql服务器的机器上不存在(如果使用LOAD DATA INFILE); 要么,
- 您尝试加载的文件在本地计算机上不存在(如果使用LOAD DATA LOCAL INFILE); 要么,
- 您要加载的文件不是世界可读的(您需要文件和所有父目录为世界可读:chmod 755目录;以及chmod 744 file.dat)
确保您的MySQL用户具有授予的FILE权限。
如果您使用的是共享虚拟主机,则有可能被您的托pipe服务提供商阻止。
尝试使用这个命令:
load data local infile 'home/data.txt' into table customer;
这应该工作。 它在我的情况下工作。
里昂的琴弦给了我一个非常好的提示:在Windows上,我们需要使用斜线而不是反斜线。 这段代码适用于我:
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();
我遇到了同样的问题,并通过以下步骤解决:
- 激活load_infilevariables
- macros文件许可给我的自定义mysql用户
- 取消激活secure_file_privvariables(我的文件被networking服务器上传到/ tmp文件夹当然不是myslq / var / lib / mysql-file的安全目录)
对于第三点,您可以参考: https : //dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
BR,
广告
这也发生在我身上,尽pipe在Yamir所描述的所有步骤中,我都无法使其工作。
该文件位于/tmp/test.csv,拥有777个权限。 MySQL用户有文件权限,我的MySQL版本不允许LOCAL选项,所以我被卡住了。
最后,我能够通过运行来解决这个问题:
sudo chown mysql:mysql /tmp/test.csv
这可能意味着您为'user'@'localhost'
提供的密码不正确。