Câu trả lời:
Tôi cũng chỉ gặp vấn đề này. Tôi đã phải thêm LOCAL
vào câu lệnh SQL của mình.
Ví dụ: điều này gây ra vấn đề về quyền:
LOAD DATA INFILE '{$file}' INTO TABLE {$table}
Thêm LOCAL
vào tuyên bố của bạn và vấn đề về quyền sẽ biến mất. Như vậy:
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
--local-infile
tùy chọn.
Tôi đã có vấn đề này. Tôi đã tìm kiếm xung quanh và không tìm thấy câu trả lời thỏa đáng. Tôi tóm tắt bên dưới kết quả tìm kiếm của tôi.
Lỗi truy cập bị từ chối có thể có nghĩa là:
GRANT FILE on *.* to user@'localhost'
); hoặc là,Hãy thử sử dụng lệnh này:
load data local infile 'home/data.txt' into table customer;
Điều này sẽ hoạt động. Nó đã hoạt động trong trường hợp của tôi.
ERROR 1148 (42000): The used command is not allowed with this MySQL version
Chuỗi từ Lyon đã cho tôi một mẹo rất hay: Trên Windows, chúng ta cần sử dụng dấu ngoặc kép chứ không phải dấu gạch chéo ngược. Mã này phù hợp với tôi:
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();
Tôi đã gặp phải vấn đề tương tự và giải quyết nó bằng cách thực hiện theo các bước sau:
Về điểm thứ 3 này, bạn có thể tham khảo tại: https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
BR,
QUẢNG CÁO
Điều này cũng xảy ra với tôi và mặc dù đã làm theo tất cả các bước được Yamir mô tả trong bài đăng của anh ấy, tôi không thể làm cho nó hoạt động.
Tệp có trong /tmp/test.csv với 777 quyền. Người dùng MySQL có quyền truy cập tệp, tùy chọn LOCAL không được phép bởi phiên bản MySQL của tôi, vì vậy tôi đã bị mắc kẹt.
Cuối cùng tôi đã có thể giải quyết vấn đề bằng cách chạy:
sudo chown mysql:mysql /tmp/test.csv
Tôi tìm thấy một cái dễ dàng nếu bạn đang sử dụng dòng lệnh
Vàomysql -u[username] -p[password] --local-infile
sau đó SET GLOBAL local_infile = 1;
chọn cơ sở dữ liệu của bạn bằng cách use [db_name]
và cuối cùng 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;
có vẻ như không hoạt động trong RDS, nhưng dù sao nếu không có điều đó --local-infile
thì thủ thuật đã xảy ra
Tôi phát hiện ra rằng việc tải các bảng MySQL có thể nhanh chóng và không gây đau đớn (tôi đang sử dụng tập lệnh trình quản lý mô hình python / Django):
1) tạo bảng với tất cả các cột VARCHAR (n) NULL, ví dụ:
mysql> CREATE TABLE cw_well2( api VARCHAR(10) NULL,api_county VARCHAR(3) NULL);
2) xóa tiêu đề (dòng đầu tiên) khỏi csv, sau đó tải (nếu bạn quên LOCAL, bạn sẽ nhận được “# 1045 - Quyền truy cập bị từ chối đối với người dùng 'user' @ 'localhost' (sử dụng mật khẩu: CÓ)”):
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) thay đổi cột:
mysql> ALTER TABLE cw_well2 CHANGE spud_date spud_date DATE;
mysql> ALTER TABLE cw_well2 CHANGE latitude latitude FLOAT;
voilà!
Nó có thể có nghĩa là mật khẩu bạn cung cấp 'user'@'localhost'
không chính xác.