Yanıtlar:
Ben de bu sorunla karşılaştım. LOCAL
SQL deyimime eklemem gerekiyordu.
Örneğin, bu izin sorununu verir:
LOAD DATA INFILE '{$file}' INTO TABLE {$table}
Ekstrenize ekleyin LOCAL
ve izin sorunu ortadan kalkacaktır. Şöyle:
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
--local-infile
seçenekle mysql'i aramanız gerekebilir .
Bu sorunu yaşadım. Etrafı araştırdım ve tatmin edici bir cevap bulamadım. Aramalarımın sonuçlarını aşağıda özetliyorum.
Erişim reddedildi hatası şu anlama gelebilir:
GRANT FILE on *.* to user@'localhost'
) sahip değil ; veya,Bu komutu kullanmayı deneyin:
load data local infile 'home/data.txt' into table customer;
Bu çalışmalı. Benim durumumda işe yaradı.
ERROR 1148 (42000): The used command is not allowed with this MySQL version
MySQL kullanıcınızın verilen FILE ayrıcalığına sahip olduğundan emin olun.
Paylaşılan web barındırma hizmetindeyseniz, bunun barındırma sağlayıcınız tarafından engellenme ihtimali vardır.
Lyon'dan gelen dize bana çok iyi bir ipucu verdi: Windows'ta ters eğik çizgi değil, slah kullanmamız gerekiyor. Bu kod benim için çalışıyor:
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();
Aynı sorunla karşılaştım ve şu adımları izleyerek çözdüm:
Bu 3. nokta için şu adrese başvurabilirsiniz: https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
BR,
AD
Bu benim de başıma geldi ve Yamir'in gönderisinde anlattığı tüm adımları izlememe rağmen işe yarayamadım.
Dosya 777 izne sahip /tmp/test.csv içindeydi. MySQL kullanıcısının dosya izinleri vardı, LOCAL seçeneğine MySQL sürümüm tarafından izin verilmedi, bu yüzden takılı kaldım.
Sonunda sorunu şu şekilde çözebildim:
sudo chown mysql:mysql /tmp/test.csv
Komut satırı kullanıyorsanız kolay buldum
Olarak giriş yapmysql -u[username] -p[password] --local-infile
sonra SET GLOBAL local_infile = 1;
veri tabanınızı seçin use [db_name]
ve sonunda 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'de işe yaramıyor gibi görünüyor, ama yine --local-infile
de hile oldu
MySQL tablolarının yüklenmesinin hızlı ve zahmetsiz olabileceğini keşfettim (python / Django model yöneticisi betikleri kullanıyordum):
1) tüm sütunlarda VARCHAR (n) NULL olan bir tablo oluşturun, örneğin:
mysql> CREATE TABLE cw_well2( api VARCHAR(10) NULL,api_county VARCHAR(3) NULL);
2) csv'den üstbilgileri (ilk satır) kaldırın, ardından yükleyin (LOCAL'ı unutursanız, "# 1045 - 'user' @ 'localhost' kullanıcısı için erişim reddedildi (şifre kullanarak: 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) sütunları değiştirin:
mysql> ALTER TABLE cw_well2 CHANGE spud_date spud_date DATE;
mysql> ALTER TABLE cw_well2 CHANGE latitude latitude FLOAT;
voilà!
Muhtemelen sağladığınız şifrenin 'user'@'localhost'
yanlış olduğu anlamına gelir .