Почему я получаю сообщение об ошибке при использовании LOAD DATA INFILE? - PullRequest
1 голос
/ 01 июня 2011

Я пытаюсь использовать SQL для загрузки файла csv с моего ноутбука в базу данных, однако я получаю странную ошибку.Код, который я печатаю в окне SQL в phpMyAdmin, выглядит следующим образом:

LOAD DATA INFILE '/Users/myMac/testServerUpload.csv' 
INTO TABLE `testDatabase` 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'

Но я получаю следующую ошибку:

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) 

Должен ли я использовать LOAD DATA LOCAL INFILE вместо моеготекущая команда как файл на моем компьютере?Оба дают мне ошибку, и я подумал, что LOCAL может означать, что это на сервере.Я не смог найти соответствующий совет по поиску этой ошибки.

Ответы [ 2 ]

2 голосов
/ 31 октября 2011

У меня была такая же проблема, и я исправил ее, используя LOCAL и указав полный путь к файлу:

'C:/directory/file.csv' 

Кажется, ошибка 1045 возникает из-за отсутствия доступа к файлам на сервере , где mySQL ищет файл, если не указан LOCAL.

См. Также:

0 голосов
/ 01 июня 2011

Вам необходимо войти в систему как пользователь root и запустить:

SHOW GRANTS FOR 'ukld'@'%';

Скорее всего, у вас нет разрешений, которые, как вы думаете, у вас есть ... вам нужны привилегии INSERT дляБД и таблицы, в которые вы пытаетесь LOAD DATA.


ОБНОВЛЕНИЕ:

Чтобы исправить проблему GRANT, выполните эти операторы как root в вашей установке MySQL:

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;

Убедитесь, что вы установили правильный пароль во втором операторе.

...