উত্তর:
আমি ঠিক এই সমস্যাটি মধ্যে দৌড়ে। আমাকে LOCAL
আমার এসকিউএল স্টেটমেন্টে যুক্ত করতে হয়েছিল।
উদাহরণস্বরূপ, এটি অনুমতি সমস্যা দেয়:
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
লিওনের স্ট্রিংটি আমাকে একটি খুব ভাল পরামর্শ দিয়েছে: উইন্ডোজে, আমাদের স্ল্যাশ ব্যবহার করা উচিত, ব্যাকস্ল্যাশগুলি নয়। এই কোডটি আমার পক্ষে কাজ করে:
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
বিআর,
বিজ্ঞাপন
আমার সাথেও এটি ঘটেছিল এবং ইয়ামির তার পোস্টে বর্ণিত সমস্ত পদক্ষেপ অনুসরণ করেও আমি এটি কার্যকর করতে পারিনি।
ফাইলটি /tmp/test.csv এ ছিল 777 অনুমতি নিয়ে। মাইএসকিউএল ব্যবহারকারীর কাছে ফাইল অনুমতি ছিল, লোকাল বিকল্পটি আমার মাইএসকিউএল সংস্করণ দ্বারা অনুমোদিত ছিল না, তাই আমি আটকে গিয়েছিলাম।
শেষ পর্যন্ত আমি চালিয়ে সমস্যার সমাধান করতে সক্ষম হয়েছি:
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;
কাজ করবে বলে মনে হয় না, তবে যাই হোক না কেন --local-infile
কৌশলটি করেছে
আমি আবিষ্কার করেছি যে মাইএসকিউএল টেবিলগুলি লোড করা দ্রুত এবং বেদনাদায়ক হতে পারে (আমি পাইথন / জ্যাঙ্গো মডেল ম্যানেজারের স্ক্রিপ্টগুলি ব্যবহার করছিলাম):
1) সমস্ত কলামের সাথে টেবিল তৈরি করুন VARCHAR (n) নূন্য উদাহরণ:
mysql> CREATE TABLE cw_well2( api VARCHAR(10) NULL,api_county VARCHAR(3) NULL);
2) সিএসভি থেকে শিরোনাম (প্রথম লাইন) সরিয়ে ফেলুন, তারপরে লোড করুন (আপনি যদি স্থানীয়কে ভুলে যান তবে আপনি পাবেন "# 1045 - ব্যবহারকারীর 'ব্যবহারকারী' @ 'লোকালহোস্ট' (পাসওয়ার্ড ব্যবহার করে: 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'
তা ভুল।