我经常在PHP中使用MySQL查询,但是当我尝试在我的查询中使用变量时,就会出现问题。
LOAD DATA INFILE
我遇到了以下错误:
#1045 - 用户'user'@'localhost'被拒绝访问(使用密码:是)
有人知道这是什么意思吗?
我经常在PHP中使用MySQL查询,但是当我尝试在我的查询中使用变量时,就会出现问题。
LOAD DATA INFILE
我遇到了以下错误:
#1045 - 用户'user'@'localhost'被拒绝访问(使用密码:是)
有人知道这是什么意思吗?
我也遇到了这个问题。我不得不在我的SQL语句中添加LOCAL
。
例如,以下代码将引发权限问题:
LOAD DATA INFILE '{$file}' INTO TABLE {$table}
在你的语句中添加LOCAL
,权限问题应该就会消失。像这样:
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
我遇到了这个问题。我搜索了一下,但没有找到令人满意的答案。以下是我搜索结果的总结:
访问被拒绝的错误可能意味着:
GRANT FILE on *.* to user@'localhost'
); 或者,尝试使用这个命令:
load data local infile 'home/data.txt' into table customer;
这应该可以运行。在我的情况下它起作用了。
确保你的MySQL用户被授予了FILE权限。
如果你正在使用共享Web托管服务,你的托管提供商可能会阻止该权限。
如果您正在使用命令行,则下面是一个简单的方法:
首先通过mysql -u[用户名] -p[密码] --local-infile
命令登录。
然后执行命令SET GLOBAL local_infile = 1;
以启用本地文件加载功能。
选择要使用的数据库,可以通过use [数据库名]
来实现。
最后,使用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;
将数据从CSV文件中加载到表中。请注意,这里保留了HTML标签且不进行解释。
--local-infile
有所帮助,然而SET GLOBAL local_infile = 1;
似乎在RDS上不起作用,但是即使没有那个命令,--local-infile
也可以解决问题。 - Fact来自里昂的字符串给了我一个非常好的提示:在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();
我遇到了同样的问题,并通过以下步骤解决:
对于第三点,您可以参考:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
祝好,
AD
我也遇到了这个问题,尽管我按照Yamir在他的帖子中描述的所有步骤进行操作,但仍然无法使其正常工作。
该文件位于/tmp/test.csv,权限为777。MySQL用户具有文件权限,我的MySQL版本不允许LOCAL选项,所以我被卡住了。
最终,我通过运行以下命令解决了问题:
sudo chown mysql:mysql /tmp/test.csv
我发现加载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'(使用密码: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;
mysql> ALTER TABLE cw_well2 CHANGE latitude latitude FLOAT;
完成!
--local-infile
选项调用 mysql。 - shabbychef