Почему я получаю сообщение об ошибке при использовании LOAD DATA INFILE?
Я пытаюсь использовать 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 ответа
У меня была такая же проблема, и я решил ее, используя LOCAL и указав полный путь к файлу:
'C:/directory/file.csv'
Кажется, ошибка 1045 происходит из-за отсутствия доступа к файлам на сервере, где mySQL ищет файл, если не указано LOCAL.
Смотрите также:
Вам нужно войти как 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;
Убедитесь, что вы установили правильный пароль во втором утверждении.