访问被拒绝在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'提供的密码不正确。