Ответы:
Я тоже столкнулся с этой проблемой. Мне пришлось добавить LOCAL
в свой SQL-запрос.
Например, это дает проблему с разрешением:
LOAD DATA INFILE '{$file}' INTO TABLE {$table}
Добавьте LOCAL
к своему утверждению, и проблема с разрешениями должна исчезнуть. Вот так:
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
--local-infile
опцией.
У меня была такая проблема. Я поискал и не нашел удовлетворительного ответа. Я резюмирую ниже результаты своих поисков.
Ошибка отказа в доступе может означать, что:
GRANT FILE on *.* to user@'localhost'
); или,Попробуйте использовать эту команду:
load data local infile 'home/data.txt' into table customer;
Это должно работать. В моем случае это сработало.
ERROR 1148 (42000): The used command is not allowed with this MySQL version
Строка из Лиона дала мне очень хороший совет: в 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();
Я столкнулся с той же проблемой и решил ее, выполнив следующие действия:
Для этого третьего пункта вы можете обратиться к: https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
BR,
ОБЪЯВЛЕНИЕ
Это случилось и со мной, и, несмотря на то, что я выполнил все шаги, описанные Ямиром в его посте, я не мог заставить его работать.
Файл находился в /tmp/test.csv с правами доступа 777. У пользователя MySQL были права доступа к файлам, опция LOCAL не была разрешена моей версией MySQL, поэтому я застрял.
Наконец, я смог решить проблему, запустив:
sudo chown mysql:mysql /tmp/test.csv
Я нашел простой, если вы используете командную строку
Войти какmysql -u[username] -p[password] --local-infile
затем SET GLOBAL local_infile = 1;
выберите вашу базу данных use [db_name]
и наконец LOAD DATA LOCAL INFILE 'C:\\Users\\shant\\Downloads\\data-1573708892247.csv' INTO TABLE visitors_final_test FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
SET GLOBAL local_infile = 1;
, похоже, не работает в RDS, но в любом случае без этого --local-infile
трюк сработал
Я обнаружил, что загрузка таблиц MySQL может быть быстрой и безболезненной (я использовал скрипты менеджера моделей python / Django):
1) создать таблицу со всеми столбцами VARCHAR (n) NULL, например:
mysql> CREATE TABLE cw_well2( api VARCHAR(10) NULL,api_county VARCHAR(3) NULL);
2) удалите заголовки (первая строка) из csv, затем загрузите (если вы забудете ЛОКАЛЬНЫЙ, вы получите «# 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;
вуаля!
Вероятно, это означает, что введенный вами пароль 'user'@'localhost'
неверен.