119

我一直在 PHP 中使用 MySQL 查询,但是当我尝试

LOAD DATA INFILE

我收到以下错误

#1045 - 用户 'user'@'localhost' 的访问被拒绝(使用密码:是)

有谁知道这意味着什么?

4

11 回答 11

224

我也遇到了这个问题。我不得不添加LOCAL到我的 SQL 语句中。

例如,这给出了权限问题:

LOAD DATA INFILE '{$file}' INTO TABLE {$table}

添加LOCAL到您的声明中,权限问题应该会消失。像这样:

LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
于 2010-11-12T06:59:49.237 回答
35

我有这个问题。我四处寻找,没有找到满意的答案。我在下面总结了我的搜索结果。

拒绝访问错误可能意味着:

  • 'user'@'localhost' 没有 FILE 权限 ( GRANT FILE on *.* to user@'localhost'); 或者,
  • 您尝试加载的文件在运行 mysql 服务器的机器上不存在(如果使用 LOAD DATA INFILE);或者,
  • 您尝试加载的文件在本地计算机上不存在(如果使用 LOAD DATA LOCAL INFILE);或者,
  • 您尝试加载的文件不是世界可读的(您需要文件所有父目录都是世界可读的:chmod 755 目录;以及 chmod 744 file.dat)
于 2013-05-27T01:42:49.113 回答
21

尝试使用此命令:

load data local infile 'home/data.txt' into table customer;

这应该有效。它在我的情况下有效。

于 2017-04-02T17:36:21.083 回答
10

确保您的 MySQL 用户已授予 FILE 权限。

如果您使用的是共享网络托管,则您的托管服务提供商可能会阻止它。

于 2010-02-08T23:46:22.940 回答
4

如果您使用命令行,我发现很容易

登录为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;

于 2019-11-15T07:58:08.733 回答
3

Lyon 的字符串给了我一个很好的提示:在 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();
于 2013-08-09T17:50:28.763 回答
2

这也发生在我身上,尽管遵循了 Yamir 在他的帖子中描述的所有步骤,但我无法让它发挥作用。

该文件位于 /tmp/test.csv 中,具有 777 权限。MySQL 用户有文件权限,我的 MySQL 版本不允许 LOCAL 选项,所以我被卡住了。

最后我能够通过运行解决问题:

sudo chown mysql:mysql /tmp/test.csv
于 2017-08-21T15:02:46.950 回答
2

我遇到了同样的问题,并按照以下步骤解决:

  • 激活 load_infile 变量
  • 对我的自定义 mysql 用户的大文件权限
  • 停用 secure_file_priv 变量(我的文件是由网络服务器上传到 /tmp 文件夹的,这当然不是 myslq /var/lib/mysql-file 的安全目录)

对于这第三点,您可以参考:https ://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv

BR,

广告

于 2017-05-11T10:21:03.897 回答
1

如果你在 MySQL Workbench 上尝试这个,

转到连接-> 编辑连接-> 选择高级选项卡

并添加OPT_LOCAL_INFILE=1“其他”文本字段。

现在重新启动连接并尝试。

在此处输入图像描述

于 2021-03-09T09:33:04.137 回答
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 - Access denied for user 'user'@'localhost' (using password: YES)”):

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;
</p>

mysql> ALTER TABLE cw_well2 CHANGE latitude latitude FLOAT;

瞧!

于 2019-07-07T17:23:10.563 回答
-6

这可能意味着您提供的密码'user'@'localhost'不正确。

于 2010-02-08T11:55:42.343 回答