উত্তর:
মাইএসকিউএল 5.5 ম্যানুয়াল পৃষ্ঠা থেকে:
আপনার সার্ভার এবং আপনার ক্লায়েন্ট উভয়ই এটির অনুমতি দেওয়ার জন্য কনফিগার করা থাকলে কেবল স্থানীয় কাজ করে। উদাহরণস্বরূপ, যদি mysqld --local-infile = 0 দিয়ে শুরু করা হয়, LOCAL কাজ করে না। বিভাগ 6.1.6, "লোড ডেটা লোকাল সহ সুরক্ষা সমস্যাগুলি" দেখুন।
আপনার বিকল্পটি সেট করা উচিত:
local-infile=1
my.cnf ফাইলটিতে আপনার [mysql] প্রবেশে বা --local-infile বিকল্পের সাথে mysql ক্লায়েন্ট কল করুন :
mysql --local-infile -uroot -pyourpwd yourdbname
আপনাকে অবশ্যই নিশ্চিত হতে হবে যে "স্থানীয় প্রতিরোধ" বৈশিষ্ট্য সার্ভারের দিকটি সক্ষম করতে একই প্যারামিটারটি আপনার [মাইএসকিএলডি] বিভাগে সংজ্ঞায়িত করা হয়েছে ।
এটি একটি সুরক্ষা নিষেধাজ্ঞা।
apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/var/www/myfile.csv" pid=19488 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=106 ouid=33। সমাধান খুব সহজ। কেবলমাত্র আপনার আপডেট করুন /etc/apparmor.d/local/usr.sbin.mysqldএবং অ্যাপারমোর পরিষেবাটি পুনরায় লোড করুন।
যে মাই সিএনএফ ফাইলটি আপনার সম্পাদনা করা উচিত তা হ'ল /etc/mysql/my.cnf ফাইল। শুধু:
sudo nano /etc/mysql/my.cnf
তারপর যোগ:
[mysqld]
local-infile
[mysql]
local-infile
হেডার [mysqld] এবং [মাইএসকিউএল] ইতিমধ্যে দেওয়া হয়, শুধু তাদের ফাইলে সনাক্ত এবং যোগ স্থানীয় এর infile তাদের প্রতিটি তলায়।
এটি আমার জন্য উবুন্টু 12.04 এলটিএস-এর মাইএসকিউএল 5.5 এ কাজ করে।
Ubuntu 14.04.2 LTS not workingপাশাপাশি নিশ্চিত করতে পারি ।
/mysql/my.cnfডিফল্টরূপে উপস্থিত নেই। কেবল ডিরেক্টরি এবং ফাইল তৈরি করুন এবং এই লাইনগুলি ফাইলে আটকান।
/etc/mysql/conf.d/enable-local-infile.cnf করার sudo service mysql restartপরেও ভুলবেন না যাতে এটি কার্যকর হয়।
নেটিভ ড্রাইভার দ্বারা ড্রাইভারটি php5-mysql প্রতিস্থাপন করুন
ডিবিয়ান উপর
apt-get install php5-mysqlnd
আমি MySQL 8.0.11 এ mysql টার্মিনাল কমান্ড দিয়ে এই সমস্যাটি সমাধান করেছি:
SET GLOBAL local_infile = true;
মানে আমি প্রথমে প্রথমে লগ ইন করেছি:
mysql -u user -p*
এর পরে আপনি কমান্ডটি দিয়ে স্থিতিটি দেখতে পাবেন:
SHOW GLOBAL VARIABLES LIKE 'local_infile';
এটি চালু করা উচিত। আমি এখানে স্থানীয় ফাইলগুলি ডাটাবেসে লোড করে জারি করা সুরক্ষা সম্পর্কে লিখব না।
SET GLOBAL local_infile = true; কাজ করে। আমার মাইএসকিউএল সংস্করণটি 8.0.12। সম্ভবত এটিই সর্বশেষ সমাধান। অনেক ধন্যবাদ.
8.0.12 MySQL Community Serverউইন্ডোজটিতে কেবল এই উত্তরটি আমার পক্ষে কাজ করেছিল ।
SET GLOBAL local_infile = true;কমান্ডটি কার্যকর করেছি তবে আমি এখনও একই ত্রুটিটি ERROR 1148 (42000): The used command is not allowed with this MySQL versionপেয়েছি তবে - লোড-ইনফিল = 1 এর সাথে মাইএসকিএল এর সংযোগ রয়েছেmysql --local-infile=1 -u root -p
যদি আপনার ওবুন্টুতে মাইএসকিএল এর স্বাদ কোনও পরিস্থিতিতে কাজ না করে এবং আপনি এখনও 1148 ত্রুটি পান তবে আপনি load data infileকমান্ড লাইনের মাধ্যমে কমান্ডটি চালাতে পারবেন
একটি টার্মিনাল উইন্ডো খুলুন
চালান mysql -u YOURUSERNAME -p --local-infile YOURDBNAME
আপনাকে মাইস্কু্লোজার পাসওয়ার্ড toোকানোর জন্য অনুরোধ করা হবে
আপনি মাইএসকিউএলমনিটর চালাবেন এবং আপনার কমান্ড প্রম্পট হবে mysql>
আপনার load data infileকমান্ড চালান (একটি সেমিকোলন দিয়ে শেষ করতে ভুলবেন না ; )
এটার মত:
load data local infile '/home/tony/Desktop/2013Mini.csv' into table Reading_Table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
নীচের চিত্রটি দেখুন ...
আমি --local-infile=1স্বাভাবিক মাইএসকিএল কমান্ড যুক্ত করেছিmysql -u root -p
সুতরাং মোট লাইন হবে:
mysql --local-infile = 1 -u root -p
SET GLOBAL ..ছিল না। কোনও 'উত্স' কমান্ড ( \. file.sql) কোনওভাবে নতুন সেশন শুরু করতে পারে বা এটি পুনরায় সেট করতে পারে? যদিও আমি এমএমএ স্কিল স্ক্রিপ্টে সেটিংটি রাখার চেষ্টা করি নি।
এছাড়াও, অন্যান্য পাঠকদের জন্য, যদি আপনি জ্যাঙ্গো এই কাজটি করার চেষ্টা করছেন এবং আপনার সার্ভারে local_infile পারবেন (যদি আপনি টাইপিং প্রদর্শন ভেরিয়েবল দ্বারা একটি MySQL ক্লায়েন্ট মাধ্যমে পরীক্ষা করতে পারবেন) তাহলে আপনি আপনার এই যোগ করতে পারেন settings.py ফাইল (যেহেতু পাইথন MySQLdb ফেলে না ' টি ডিফল্টরূপে .my.cnf ফাইলটি পড়ুন):
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'myname',
'PASSWORD': 'mypass',
'HOST': 'myserver',
'PORT': '3306',
'OPTIONS' : {
'local_infile':1,
},
}
}
আপনি কীভাবে আপনার মাইএসকিলি সংযোগ স্থাপন করবেন সে বিষয়ে আপনাকে খেয়াল রাখতে হবে। এই সমাধানটির সম্পূর্ণ ক্রেডিট উত্স জর্জে আলবার্কের কাছে যায়
এটি ঠিক করার জন্য আমাকে এগুলি করতে হয়েছিল:
ক্যাচটি হ'ল সেই ফাংশনটির মাধ্যমে আপনি স্পষ্টভাবে লোড ডেটা লোকাল ইনফিলের জন্য সমর্থন সক্ষম করতে পারেন। উদাহরণস্বরূপ (পদ্ধতিগত শৈলী):
$link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($link, $host, $username, $password, $database);
বা অবজেক্ট ওরিয়েন্টেড
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_LOCAL_INFILE, true);
$mysqli->real_connect($host, $username, $password, $database);
আপনার CSV ফাইল অবস্থিত যদি একই ডিবি সঙ্গে, আপনি সরানোর প্রয়োজন স্থানীয় মধ্যে লোড ডেটা infile বা, আপনি ত্রুটি পাবেন
এই মাইএসকিউএল সংস্করণ সহ ব্যবহৃত কমান্ডের অনুমতি নেই
আরেকটি উপায় হ'ল এটি ব্যবহার করা mysqlimport ক্লায়েন্ট প্রোগ্রাম ।
আপনি নিম্নলিখিত হিসাবে এটি প্রার্থনা:
mysqlimport -uTheUsername -pThePassword --local yourDatabaseName tableName.txt
এটি একটি LOAD DATAবিবৃতি উত্পন্ন করে যা লোড tableName.txtহয়tableName টেবিলে ।
নিম্নলিখিত বিষয়গুলি মনে রাখবেন:
mysqlimportআপনার সরবরাহ করা ফাইল থেকে সারণির নাম নির্ধারণ করে; ফাইলের নাম শুরু থেকে প্রথম সময় অবধি টেবিলের নাম হিসাবে সমস্ত পাঠ্য ব্যবহার করা। সুতরাং, যদি আপনি একই টেবিলে বিভিন্ন ফাইল লোড করতে ইচ্ছুক আপনি তাদের মত পার্থক্য পারে tableName.1.txt, tableName.2.txt..., ইত্যাদি, উদাহরণস্বরূপ।
এটি আমার জন্য কিছুটা অদ্ভুত হয়ে উঠল, একদিন থেকে পরের দিন পর্যন্ত যে স্ক্রিপ্টটি কয়েক দিন ধরে কাজ করে চলেছে কেবল কাজ করা বন্ধ করে দেয়। মাইএসকিএল বা কোনও ধরণের আপগ্রেডের নতুন সংস্করণ ছিল না তবে আমি একই ত্রুটি পাচ্ছিলাম, তাই আমি সিএসভি ফাইলে সর্বশেষ চেষ্টা করব এবং লক্ষ্য করেছি যে রেখাগুলির শেষটি প্রত্যাশার পরিবর্তে using n ব্যবহার করছে (আমার স্ক্রিপ্ট অনুসারে) ) \ r \ n তাই আমি এটিকে সঠিক EOL দিয়ে সংরক্ষণ করব এবং কোনও ঝামেলা ছাড়াই আবার স্ক্রিপ্টটি চালাব।
আমার মতে এসকিউএলএর জন্য একরকম অদ্ভুত বলে আমি মনে করি কারণ এই মাইএসকিউএল সংস্করণটির সাথে ব্যবহৃত কমান্ডটি অনুমোদিত নয় কারণ কারণটি সম্পূর্ণ আলাদা ছিল।
আমার ওয়ার্কিং কমান্ডটি দেখতে এমন দেখাচ্ছে:
LOAD DATA LOCAL INFILE 'file-name' IGNORE INTO TABLE table-name CHARACTER SET latin1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES.
আমি নীচে পদ্ধতিটি ব্যবহার করেছি, যার জন্য কনফিগারেশনের কোনও পরিবর্তন দরকার নেই , mysql-5.5.51-winx64 এবং 5.5.50-মারিয়াডিবিতে পরীক্ষা করা হয়েছে:
.sql ফাইলটিতে 'লোড ডেটা ...' রাখুন (উদা: লোড টেবিলনেম.এসকিউএল)
LOAD DATA INFILE 'D:\\Work\\TableRecords.csv' INTO TABLE tbl1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (col1,col2);
তারপর:
mysql -uroot -pStr0ngP@ss -Ddatabasename -e "source D:\Work\LoadTableName.sql"
ঠিক আছে, এখানে অদ্ভুত কিছু ঘটছে। এই কাজটি করতে, /etc/mysql/my.cnf এ কোনও কনফিগারেশন পরিবর্তন করার দরকার নেই। আপনাকে যা করতে হবে তা হ'ল টার্মিনালে বর্তমান মাইএসকিএল পরিষেবাটি পুনরায় চালু করতে হবে:
sudo service mysql restart
তারপরে যদি আমি বাগটি "পুনরায় তৈরি করতে" চাই, তবে আমি কেবল অ্যাপাচি পরিষেবাটি পুনরায় চালু করব:
sudo service apache2 restart
যা নিম্নলিখিত কমান্ডটি প্রবেশ করে আবার ঠিক করা যেতে পারে:
sudo service mysql restart
সুতরাং, দেখা যাচ্ছে যে অ্যাপাচি 2 এই বৈশিষ্ট্যটি আরম্ভ করার সময় অনুমতি না দেওয়ার জন্য কিছু করছে (যা মাইএসকিএল পরিষেবাটি পুনরায় আরম্ভ করলে বিপরীত / সংশোধন করা হয়)।
দেবিয়ান ভিত্তিক বিতরণগুলিতে বৈধ।
service mysqld restart
service httpd restart
রেডহ্যাট ভিত্তিক বিতরণগুলিতে বৈধ
আপনারা যারা LOCALলড ডেটা ইনফাইলটি আমার মতো কাজ করতে উত্তর খুঁজছেন তাদের পক্ষে এটি সম্ভবত কার্যকর হতে পারে। ভাল এটা আমার জন্য কাজ করেছে, তাই এখানে এটি যায়। perconaলিঙ্ক থেকে পদক্ষেপগুলি অনুসরণ করে আপনার মাইএসকিএল সার্ভার এবং ক্লায়েন্ট হিসাবে ইনস্টল করুন। ইনস্টলেশন চলাকালীন একটি পাসওয়ার্ড জিজ্ঞাসা করা হবে, সুতরাং একটি মনে রাখবেন যা আপনি মনে রাখবেন এবং এটি পরে ব্যবহার করবেন। একটি ইনস্টলেশন সম্পন্ন হয়েছে, আপনার সিস্টেমটি পুনরায় বুট করুন এবং সার্ভারটি চালু হয়ে চলছে কিনা তা পরীক্ষা করে terminalলিখুন mysql -u root -pএবং তারপরে পাসওয়ার্ড দিয়ে যান। LOAD DATA LOCAL INFILEএখনই কমান্ড চালানোর চেষ্টা করুন .. আশা করি এটি কার্যকর হয় :)
বিটিডাব্লু আমি উবুন্টু ১২.০৪-এ রুবি ১.৯.৩ এর সাথে রেল ২.৩ এ কাজ করছিলাম।
local_infileউভয় clientএবং mysqldবিভাগে যোগ করুন ।
[client]
local_infile=1
...
[mysqld]
local_infile=1
...
উইন্ডোজ এবং লিনাক্স উভয়ই মাইএসকিউএল 8.x এ পরীক্ষিত।
আমি xampp v3.2.4 এবং mysql সার্ভার 8.0.20 ব্যবহার করছি।
আমি যোগ local-infile=1করতে [mysql]এবং[mysqld] ফাইলের মধ্যে "my.ini"। ফাইলটি "সি: am xampp \ mysql \ bin \ my.ini" এ অবস্থিত।
তারপরে আমি সিএসভি ফাইল থেকে নীচের কোডটি ব্যবহার করে ডেটা .োকালাম LOAD DATA INFILE ... । LOCAL সরানো গুরুত্বপূর্ণ। অন্যথায় এটি কাজ করবে না।
উপরের সমস্ত পরামর্শের জন্য ধন্যবাদ। একটি সমন্বয় অবশেষে আমার জন্য কাজ করে।
my.cnfপথটি/etc/mysql/my.cnfআমার মেশিনে রয়েছে (এডাব্লুএস ইসি 2)।