MySQL中加载数据填充的访问被拒绝
我在PHP中一直使用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添
加载数据填充
我得到以下错误
#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