Я использую MySQL-запросы все время в PHP, но когда я пытаюсь загрузить LOAD DATA INFILE, я получаю следующую ошибку #1045 - Access denied for user 'user'@'localhost' (using password: YES)
Кто-нибудь знает, что это значит?
Доступ запрещен для загрузки данных infile в MySQL
Ответ 1
Я просто столкнулся с этой проблемой. Мне пришлось добавить "LOCAL" в мой оператор SQL.
Например, это дает проблему разрешения: LOAD DATA INFILE '{$file}' INTO TABLE {$table}
Добавьте "ЛОКАЛЬНЫЙ" к вашему заявлению, и проблема с разрешениями должна исчезнуть. Вот так: LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
Ответ 2
У меня была эта проблема. Я искал вокруг и не нашел удовлетворительного ответа. Ниже подведены итоги моих поисков.
Ошибка в доступе может означать, что:
- 'user' @'localhost' не имеет привилегии FILE (
GRANT FILE on *.* to [email protected]'localhost'
); или же, - файл, который вы пытаетесь загрузить, не существует на компьютере с сервером mysql (если используется LOAD DATA INFILE); или же,
- файл, который вы пытаетесь загрузить, не существует на вашем локальном компьютере (если вы используете LOAD DATA LOCAL INFILE); или же,
- файл, который вы пытаетесь загрузить, не доступен для чтения всему миру (вам необходимо, чтобы файл и все родительские каталоги были доступны для чтения всем пользователям: каталог chmod 755; и файл chmod 744 file.dat)
Ответ 3
Попробуйте использовать эту команду:
load data local infile 'home/data.txt' into table customer;
Это должно сработать. Он работал в моем случае.
Ответ 4
Убедитесь, что ваш пользователь MySQL имеет привилегию FILE.
Если вы находитесь на общедоступном веб-хостинге, есть вероятность, что ваш хостинг-провайдер заблокирован.
Ответ 5
Строка из Лиона дала мне очень хороший совет: в 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();
Ответ 6
Я столкнулся с той же проблемой и решил ее, выполнив следующие шаги:
- активировать переменную load_infile
- Грандиозное разрешение файла моему пользовательскому пользователю mysql
- деактивировать переменную secure_file_priv (мой файл был загружен веб-сервером в папку /tmp, которая, конечно же, не является защищенным каталогом myslq/var/lib/mysql файла)
Для этого 3-го пункта вы можете обратиться к: https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
БР,
AD
Ответ 7
Это случилось и со мной, и, несмотря на то, что он выполнил все шаги, описанные Ямиром в своем посте, я не смог заставить его работать.
Файл находился в /tmp/test.csv с разрешениями 777. У пользователя MySQL были права доступа к файлам, опция LOCAL не была разрешена моей версией MySQL, поэтому я застрял.
Наконец, я смог решить проблему, выполнив:
sudo chown mysql:mysql /tmp/test.csv
Ответ 8
Я обнаружил, что загрузка таблиц 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;
вуаля!
Ответ 9
Вероятно, это означает, что пароль, который вы указали для 'user'@'localhost'
, неверен.