जवाबों:
मैं बस इस मुद्दे में भाग गया। मुझे LOCAL
अपने SQL स्टेटमेंट में जोड़ना था ।
उदाहरण के लिए, यह अनुमति समस्या देता है:
LOAD DATA INFILE '{$file}' INTO TABLE {$table}
LOCAL
अपने बयान में जोड़ें और अनुमतियाँ समस्या दूर होनी चाहिए। इस तरह:
LOAD DATA LOCAL INFILE '{$file}' INTO TABLE {$table}
--local-infile
विकल्प के साथ mysql भी कॉल करना पड़ सकता है।
मुझे यह समस्या थी। मैंने आसपास खोज की और कोई संतोषजनक उत्तर नहीं मिला। मैं अपनी खोजों के परिणामों को संक्षेप में बताता हूं।
पहुँच अस्वीकृत त्रुटि का अर्थ हो सकता है:
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
ल्यों से स्ट्रिंग ने मुझे बहुत अच्छी टिप दी: विंडोज पर, हमें स्लैश का उपयोग करने की आवश्यकता है, न कि बैकस्लैश की। यह कोड मेरे लिए काम करता है:
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
बीआर,
ई
यह मेरे साथ भी हुआ और यामीर द्वारा बताए गए सभी चरणों का पालन करने के बावजूद मैं इसे काम नहीं कर सका।
फ़ाइल 777 अनुमतियों के साथ /tmp/test.csv में थी। 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 टेबल लोड करना तेज और दर्द रहित हो सकता है (मैं अजगर / Django मॉडल मैनेजर स्क्रिप्ट का उपयोग कर रहा था):
1) सभी स्तंभों के साथ तालिका बनाएं VARCHAR (n) पूर्ण उदाहरण:
mysql> CREATE TABLE cw_well2( api VARCHAR(10) NULL,api_county VARCHAR(3) NULL);
2) सीएसवी से हेडर (पहली पंक्ति) को हटा दें, फिर लोड करें (यदि आप LOCAL को भूल जाते हैं, तो आपको "# 1045 - उपयोगकर्ता के उपयोगकर्ता '@' लोकलहोस्ट '(पासवर्ड का उपयोग करते हुए एक्सेस करने से इनकार कर दिया जाएगा):")
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'
गलत है।