MySQL中加载数据填充的访问被拒绝

MySQL中加载数据填充的访问被拒绝,mysql,load-data-infile,mysql-error-1045,Mysql,Load Data Infile,Mysql Error 1045,我在PHP中一直使用MySQL查询,但是当我尝试 加载数据填充 我得到以下错误 #1045-拒绝用户“用户”@“本地主机”的访问(使用密码:是) 有人知道这意味着什么吗?这可能意味着您为'user'@'localhost'提供的密码不正确。请确保您的MySQL用户具有授予的文件权限 如果您使用的是共享web主机,则有可能被您的主机提供商阻止。我也遇到了这个问题。我不得不在SQL语句中添加LOCAL 例如,这会导致权限问题: 将数据填充“{$file}”加载到表{$TABLE} 将LOCAL添

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

加载数据填充
我得到以下错误

#1045-拒绝用户“用户”@“本地主机”的访问(使用密码:是)


有人知道这意味着什么吗?

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

请确保您的MySQL用户具有授予的文件权限


如果您使用的是共享web主机,则有可能被您的主机提供商阻止。

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

例如,这会导致权限问题:

将数据填充“{$file}”加载到表{$TABLE}
LOCAL
添加到您的语句中,权限问题应该消失。像这样:

将数据本地填充“{$file}”加载到表{$TABLE}

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

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

  • “user'@'localhost'没有文件权限(
    将*.*上的文件授予user@'localhost'
    );或者
  • 您试图加载的文件在运行mysql服务器的计算机上不存在(如果使用load DATA Inflie);或者
  • 您试图加载的文件在本地计算机上不存在(如果使用加载数据本地填充);或者
  • 您试图加载的文件不是全世界可读的(您需要该文件和所有父目录都是全世界可读的:chmod 755 directory;以及chmod 744 file.dat)

    • 里昂的绳子给了我一个很好的提示:在窗户上,我们需要使用斜杠,而不是反斜杠。此代码适用于我:

          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 data local infile 'home/data.txt' into table customer;
      

      这应该行得通。在我的情况下,它起了作用。

      我遇到了同样的问题,并通过以下步骤解决了它:

      • 激活加载填充变量
      • 我的自定义mysql用户的大文件权限
      • 停用secure_file_priv变量(我的文件由Web服务器上载到/tmp文件夹,该文件夹当然不是myslq/var/lib/mysql文件的安全目录)
      关于第三点,您可以参考:

      比尔


      这件事也发生在我身上,尽管我遵循了亚米尔在他的帖子中描述的所有步骤,但我还是无法做到

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

      最后,我通过运行以下命令解决了问题:

      sudo chown mysql:mysql /tmp/test.csv
      

      我发现加载MySQL表可以快速且轻松(我使用的是python/Django模型管理器脚本):

      1) 创建所有列均为VARCHAR(n)NULL的表,例如:

      mysql>创建表cw_well2(api VARCHAR(10)NULL,api_county VARCHAR(3)NULL)

      
 2) 从csv中删除标题(第一行),然后加载(如果您忘记了本地,您将获得“#1045-用户'user'@'localhost'的访问被拒绝”(使用密码:YES)”:

      mysql>将数据本地填充“/home/magula6/cogswatch2/well2.csv”加载到以“,”结尾的表cw\u well2字段中,“\n”
          -> ;
      查询正常,119426行受影响,19962条警告(3.41秒)

      
 3) 更改列:

      mysql>ALTER TABLE cw_well2 CHANGE spud_date spud_date

      mysql>ALTER TABLE cw_well2改变纬度浮动


      如果您使用命令行,我发现了一个简单的方法

      mysql-u[username]-p[password]--localinfle登录

      然后
      设置全局局部加密=1

      通过
      使用[db\u name]


      最后,
      加载数据本地填充'C:\\Users\\shant\\Downloads\\DATA-1573708892247.csv'到表访问者中\u final\u测试字段以',行以'\r\n'终止忽略1行

      如果您正在MySQL工作台上尝试此操作

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

      并在“其他”文本字段中添加
      OPT_LOCAL\u infle=1

      现在重新启动连接并重试


      我不这么认为。我可以用相同的密码进行其他查询。这是另一回事。它将您的文件上传到临时目录中的服务器。有时候这是必要的,但是如果内嵌已经在MySQL服务器上,那么你只是在做多余的工作。是的,这对我来说很有用,我是通过ssh转发数据库服务器端口的,我猜它是在没有本地端口的远程数据库服务器上查找文件part@jeremysawesome对我来说,这会产生以下错误:错误代码:1148此MySQL版本不允许使用该命令。我尝试了一些解决此问题的方法,例如将mysql文件修改为local infle=1,但也失败了。您可能还必须使用
      --local infle
      选项调用mysql。此外,还必须使用文件的绝对路径:/home/[currentuser]/filename+1:这对我有效:您尝试加载的文件不是世界可读的(您需要文件和所有父目录都是全世界可读的:chmod 755 directory;和chmod 744 file.dat)。我没有更改我所有目录的权限User Tatiana指出,您不能为每个数据库授予文件权限,只能为整个服务器授予。grant命令将是“将上的文件授予由“密码”标识的用户@'localhost'”;“@JAL我想你的意思是”将*.*上的文件授予用户…--可能星号字符是strippedas@Eugene M说这会在共享web主机上产生错误:使用“加载数据本地填充”会有帮助吗?”
      错误1148(42000):此MySQL版本不允许使用此命令
      @Stewart,请从上述命令中删除“local”。当全局变量“local\u infle”var