Why do I get an error when using LOAD DATA INFILE? - mysql

I'm trying to use SQL to upload a csv file from my laptop to a database, however I get a strange error. The code I am typing into the SQL window in phpMyAdmin is as follows:
LOAD DATA INFILE '/Users/myMac/testServerUpload.csv'
INTO TABLE `testDatabase`
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
But I get the following error:
Error
SQL query:
LOAD DATA INFILE '/Users/myMac/testServerUpload.csv' INTO TABLE `testDatabase` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
MySQL said: Documentation
#1045 - Access denied for user 'ukld'#'%' (using password: YES)
Should I be using LOAD DATA LOCAL INFILE instead of my current command as the file is on my computer? Both give me an error, and I thought LOCAL might mean that it is on the server. I could not find relevant advice searching for this error.

I had this same issue and fixed it by using LOCAL and giving the full file path:
'C:/directory/file.csv'
It seems the 1045 error comes from not having access to files on the server, which is where mySQL looks for the file if LOCAL is not specified.
See also:
http://dev.mysql.com/doc/refman/5.1/en/mysqlimport.html

You need to login as root and run:
SHOW GRANTS FOR 'ukld'#'%';
Chances are you don't have the permissions that you think you do...you need INSERT privileges on the db and table(s) into which you are trying to LOAD DATA.
UPDATE:
To correct the GRANT issue, run these statements as root in your MySQL install:
REVOKE SELECT, INSERT, UPDATE, DELETE, CREATE,
DROP, INDEX, ALTER, CREATE TEMPORARY TABLES,
LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW,
CREATE ROUTINE, ALTER ROUTINE
ON ukld.* FROM 'ukld'#'%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE,
DROP, INDEX, ALTER, CREATE TEMPORARY TABLES,
LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW,
CREATE ROUTINE, ALTER ROUTINE
ON ukld.* TO 'ukld'#'%' IDENTIFIED BY PASSWORD 'xxx';
FLUSH PRIVILEGES;
Make sure you set the correct password in the second statement.

Related

How to give SUPER privileges to remote user in mysql?

I have a MySQL database in the server. I'd like to insert some data that I have in .csv format. After connecting to remote database, I try to execute below SQL statement.
LOAD DATA LOCAL INFILE '~/Downloads/words.csv'
INTO TABLE word
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
Result is the error:
The used command is not allowed with this MySQL version
After doing some research, I understood that I have to enable local-infile to be able import csv to table. In order to set local-infile to 1 I execute this statement:
SET GLOBAL local_infile = 1;
Result is the error:
ERROR 1227 (42000): Access denied; you need (at least one of) the
SUPER privilege(s) for this operation
And when I try to grant all permissions to remote user with below statement
GRANT ALL PRIVILEGES ON *.* TO username#host;
I get,
You are not allowed to create a user with GRANT
even to I'm logged in as root. What do I need to do?
Create the user before giving it a grant;
CREATE USER username#host IDENTIFIED BY 'some password'
GRANT ALL PRIVILEGES ON *.* TO username#host;

Exporting data into a table not working with Access Denied error

I have a table in a database myDatabase in Amazon RDS. Let it be myTable.
use myDatabase;
SELECT * from myTable INTO OUTFILE 'myFile.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"'LINES
TERMINATED BY '\n';
I get this error
Error Code: 1045. Access denied for user '<<UserName>>'#'%' (using password: YES)
I tried running this command
GRANT USAGE ON *.* TO '<<UserName>>'#'%' IDENTIFIED BY '<<password>>';
flush privileges;
0 row(s) affected, 1 warning(s): 1287 Using GRANT statement to modify existing user's
properties other than privileges is deprecated and will be removed in future release. Use
ALTER USER statement for this operation.
I get this warning.
And
I am not able to export the table into a .CSV file at all.
Any idea on how to solve it ? Any thoughts on the steps which might have gone wrong ?
Make sure your user has the FILE privilege.
FILE
Affects the following operations and server behaviors:
Enables reading and writing files on the server host using the LOAD DATA and SELECT ... INTO OUTFILE statements and the LOAD_FILE()
function. A user who has the FILE privilege can read any file on the
server host that is either world-readable or readable by the MySQL
server. (This implies the user can read any file in any database
directory, because the server can access any of those files.)
Enables creating new files in any directory where the MySQL server has write access. This includes the server's data directory containing
the files that implement the privilege tables.
manual entry

getting error while connecting to database with shell script

i have a simple shell script that is trying to connect to a database and is trying to load a text file into a database table through load infile statement inside a script and the script throws this error
ERROR 1045 (28000) at line 6: Access denied for user 'user'#'%' (using password: YES)
The script is
#!/bin/bash
#connect to the db
mysql -u bsm_admin -pbsmP1N1 -h ilcldbpbsm01 << EOFMYSQL
show databases;
use database;
show tables;
load data infile 'plugins.txt' into table jenkins fields terminated by ':' lines terminated by '\n';
EOFMYSQL
so the problem is other statememts work but the error comes at load data infile line.
i tried checking whether the user has write permissions to the database and i was able to create and insert data to the table through command line, so i am guessing it is not a permission issue.
Also i didnot create the user, it was already created.
This is because you don't have FILE privilege. Refer to mysql manual
The FILE privilege gives you permission to read and write files on the server host using the LOAD DATA INFILE and SELECT ... INTO OUTFILE statements and the LOAD_FILE() function.

Grant database user folder access

I'm trying to create a csv export of data from mysql using the following query:
SELECT * INTO OUTFILE '/tmp/result.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
FROM getfreepellets WHERE 1
And I get the following error:
#1045 - Access denied for user '[username]'#'localhost' (using password: YES)
(removed username but it's the right one)
How would I go about granting access to this user to create a file on the server?
Edit:
I changed the first line to be my exact home path, and received the same error.
You may want to GRANT your user the FILE privilege:
The FILE privilege gives you permission to read and write files on the server host using the LOAD DATA INFILE and SELECT ... INTO OUTFILE statements and the LOAD_FILE() function.
A user who has the FILE privilege can read any file on the server host that is either world-readable or readable by the MySQL server. (This implies the user can read any file in any database directory, because the server can access any of those files.) The FILE privilege also enables the user to create new files in any directory where the MySQL server has write access. As a security measure, the server will not overwrite existing files.
To grant the FILE privilege, log-in as root and execute:
GRANT FILE ON *.* TO 'your_user'#'localhost';

Mysql permission errors with 'load data'

I am running into a permission error when trying to load data from a flat file database dump into a new table. I know that the schema of the file and my table is the same and I tried tweaking the permissions. What else should I try?
mysql> load data infile 'myfile.txt' into table mytable fields terminated by ',' enclosed by '"';
ERROR 1045 (28000): Access denied for user 'user'#'%'
grant all on mytable.* to 'user'#'%
Here's a thread on the MySQL forums that discusses exactly this.
Here's the answer, posted by Ken Tassell
Problem resolved using the command below:
grant file on *.* to kentest#localhost identified by 'kentest1';
You might have MySQL privileges on the destination table, but you also need the FILE privilege to execute LOAD DATA, and of course the MySQL Server process needs operating-system privileges to the data file too.