মাইএসকিউএল: লোড ডেটা লোকাল ইনফাইলে সক্ষম করুন


127

আমি উবুন্টু 12 এলটিএসে মাইএসকিএল 5.5 চালাচ্ছি। আমার সিএনএফ এ লোড ডেটা লোকাল ইনফিল কীভাবে সক্ষম করব?

আমি আমার কনফিগারেশনে বিভিন্ন জায়গায় লোকাল-ইনফিল যোগ করার চেষ্টা করেছি তবে আমি এখনও "এই মাইএসকিউএল সংস্করণ দিয়ে ব্যবহৃত কমান্ডটি অনুমোদিত নয়" পেয়ে যাচ্ছি

উত্তর:


197

মাইএসকিউএল 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

আপনাকে অবশ্যই নিশ্চিত হতে হবে যে "স্থানীয় প্রতিরোধ" বৈশিষ্ট্য সার্ভারের দিকটি সক্ষম করতে একই প্যারামিটারটি আপনার [মাইএসকিএলডি] বিভাগে সংজ্ঞায়িত করা হয়েছে ।

এটি একটি সুরক্ষা নিষেধাজ্ঞা।


4
ধন্যবাদ. বিটিডব্লিউ, my.cnfপথটি /etc/mysql/my.cnfআমার মেশিনে রয়েছে (এডাব্লুএস ইসি 2)।
স্পার্কএন্ডশাইন

মজার বিষয় হল, আমার সিএনএফ ফাইলটি আমার জন্য / ইত্যাদি ডিরেক্টরিতে ছিল।
SgtRock

এটি এখনও ব্যর্থ হলে কোথায় যেতে হবে সে সম্পর্কে কোনও ধারণা। আমি [ক্লায়েন্ট], [মাইএসকিএলডি], এবং [মাইএসকিএল] এর অধীনে মাই সিএনএফ ফাইলটিতে লোকাল-ইনফিল = 1 যুক্ত করেছি এবং এর সংযুক্তি ব্যবহার করেছি। সমস্ত একই ফলাফল। আমি ওয়ার্কবেঞ্চ পুনরায় শুরু করার চেষ্টা করেছি কিন্তু ভাগ্য নেই। আমি প্রতিস্থাপনের পাশাপাশি মাইএসকিউএল ওয়ার্কব্যাঞ্চ থামিয়েছি এবং শুরু করেছি।
অরওয়েলহিনডেনবার্গ

2
মাইএসকিউএল-এর একটি আপডেট 6.2.5-এ আমার জন্য এই সমস্যার সমাধান করেছে
অরওয়েলহিনডেনবার্গ

উত্তরটি সঠিক দিকে। তবে যারা এখানে এই সমস্যার মুখোমুখি হন তাদের পক্ষে আরও একটি গোচা। আপনি যদি আপনার সিস্টেমে অ্যাপারর্ম সক্ষম করে থাকেন এবং সমস্যাটি অব্যাহত থাকে তবে মাইএসকিএলডি ডিমন ব্লক হচ্ছে কিনা তা দেখতে সিসলগটি পরীক্ষা করে দেখুন। আমি এই সমস্যা: 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এবং অ্যাপারমোর পরিষেবাটি পুনরায় লোড করুন।
লিও

60

যে মাই সিএনএফ ফাইলটি আপনার সম্পাদনা করা উচিত তা হ'ল /etc/mysql/my.cnf ফাইল। শুধু:

sudo nano /etc/mysql/my.cnf

তারপর যোগ:

[mysqld]
local-infile 

[mysql]
local-infile 

হেডার [mysqld] এবং [মাইএসকিউএল] ইতিমধ্যে দেওয়া হয়, শুধু তাদের ফাইলে সনাক্ত এবং যোগ স্থানীয় এর infile তাদের প্রতিটি তলায়।

এটি আমার জন্য উবুন্টু 12.04 এলটিএস-এর মাইএসকিউএল 5.5 এ কাজ করে।


1
এটি অবশ্যই উবুন্টু 12.04 দিয়ে আমার জন্য এটি স্থির করেছে।
জন ফিয়ালা

4
আমি Ubuntu 14.04.2 LTS not workingপাশাপাশি নিশ্চিত করতে পারি ।
আইন তোহ্বরী

ম্যাকের জন্যও কাজ করে। ম্যাক ব্যবহারকারীর জন্য, /mysql/my.cnfডিফল্টরূপে উপস্থিত নেই। কেবল ডিরেক্টরি এবং ফাইল তৈরি করুন এবং এই লাইনগুলি ফাইলে আটকান।
ঝেং লিউ

আপনি যদি মাইএসকিএল আপগ্রেড হওয়ার সময় এই কনফিগারেশনটি ওভাররাইট করা না চান তবে আপনার এটির মধ্যে রাখা উচিত কনফিগারেশন পরিবর্তন /etc/mysql/conf.d/enable-local-infile.cnf করার sudo service mysql restartপরেও ভুলবেন না যাতে এটি কার্যকর হয়।
স্টিফেন অস্টেরমিলার

এটি সঠিক সমাধান। সর্বাধিক আপভোটেড সমাধানটি আপনাকে প্রথমে [মাইএসকিএলডি] রাখতে হবে উল্লেখ করে ব্যর্থ হয় স্থানীয়-পীড়িত করার জন্য।
ব্যবহারকারীর 3260912

30

নেটিভ ড্রাইভার দ্বারা ড্রাইভারটি php5-mysql প্রতিস্থাপন করুন

ডিবিয়ান উপর

apt-get install php5-mysqlnd

এই কাজ! আরডিএসের সাথে সংযোগ স্থাপন করায় স্টক আওস 12.04 উবুন্টু ব্যবহার করে আমার 'স্থানীয়' দরকার ছিল। অসংখ্য ধন্যবাদ!
জেমস বোলার 21

অনেক ধন্যবাদ, এই সমাধানটি আমার পক্ষে কাজ করেছে। আমি প্রশ্ন জিজ্ঞাসা stackoverflow.com/questions/36526102/...
user75472

কোনও সাফল্য উবুন্টু 12.04
জবিস্কেক

আর একটি সুখী গ্রাহক! উবুন্টু 14.04 mysql 5.7
নোডোজ করুন

27

আমি 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। সম্ভবত এটিই সর্বশেষ সমাধান। অনেক ধন্যবাদ.
ম্যাথসিয়থ

1
দুর্ভাগ্যক্রমে সার্ভারটি পুনরায় চালু করার পরে পরিবর্তনশীলটি আবার বন্ধ।
পেড্রো

মোহিত, একরকম আমি এটি সমাধান করেছি, কারণ এখন বিশ্বব্যাপী চলক 'লোকাল_ইনফাইল' সর্বদা চালু থাকে, এমনকি পুনরায় বুট করার পরেও। এবং দেখে মনে হচ্ছে আমি এর জন্য my.cnf ফাইলটি ব্যবহার করি নি। আপনি, দয়া করে, পিএইচপিএমএইডমিনে লগ ইন করার চেষ্টা করতে পারেন, রুট হিসাবে সর্বশেষ সংস্করণটি, ভেরিয়েবল বিভাগে যেতে পারেন, 'লোকাল_ইনফাইলে' অনুসন্ধান করতে পারেন, তারপরে সম্পাদনা ক্লিক করুন এবং এটিতে পরিবর্তন করতে পারেন এবং শেষ পর্যন্ত এন্টার টিপুন। এটা কি কাজ করেছিল?
ওলেকসী মুজলিয়েভ

2
8.0.12 MySQL Community Serverউইন্ডোজটিতে কেবল এই উত্তরটি আমার পক্ষে কাজ করেছিল ।
এন্ডো 64

আমার উইন্ডোজ সার্ভারে মাইএসকিউএল 8.0.16 ইনস্টল হয়েছে 2016, আমি 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
জুনিয়র

13

যদি আপনার ওবুন্টুতে মাইএসকিএল এর স্বাদ কোনও পরিস্থিতিতে কাজ না করে এবং আপনি এখনও 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';

9

নীচের চিত্রটি দেখুন ...

আমি --local-infile=1স্বাভাবিক মাইএসকিএল কমান্ড যুক্ত করেছিmysql -u root -p

সুতরাং মোট লাইন হবে:

mysql --local-infile = 1 -u root -p

এখানে চিত্র বর্ণনা লিখুন


এটি আমার পক্ষে কাজ করে নি যখন SET GLOBAL ..ছিল না। কোনও 'উত্স' কমান্ড ( \. file.sql) কোনওভাবে নতুন সেশন শুরু করতে পারে বা এটি পুনরায় সেট করতে পারে? যদিও আমি এমএমএ স্কিল স্ক্রিপ্টে সেটিংটি রাখার চেষ্টা করি নি।
toddkaufmann

5

এছাড়াও, অন্যান্য পাঠকদের জন্য, যদি আপনি জ্যাঙ্গো এই কাজটি করার চেষ্টা করছেন এবং আপনার সার্ভারে 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,
        },
    }
}

3

আপনি কীভাবে আপনার মাইএসকিলি সংযোগ স্থাপন করবেন সে বিষয়ে আপনাকে খেয়াল রাখতে হবে। এই সমাধানটির সম্পূর্ণ ক্রেডিট উত্স জর্জে আলবার্কের কাছে যায়

এটি ঠিক করার জন্য আমাকে এগুলি করতে হয়েছিল:

  • স্থানীয়- infile = 1 কে [মাইএসকিএলডি] এবং [মাইএসকিএল] মাই.সিএনএফের বিভাগগুলিতে যুক্ত করুন (উপরের মন্তব্যে বর্ণিত হিসাবে)
  • Mysqli_real_connect ফাংশন ( পিএইচপি ডকুমেন্টেশন ) ব্যবহার করুন ।

ক্যাচটি হ'ল সেই ফাংশনটির মাধ্যমে আপনি স্পষ্টভাবে লোড ডেটা লোকাল ইনফিলের জন্য সমর্থন সক্ষম করতে পারেন। উদাহরণস্বরূপ (পদ্ধতিগত শৈলী):

$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);

1
@ মাস্ক নিশ্চিত করতে পারছে না। আমার সমাধান 5.5.46 (উবুন্টু)
সিপ্পল

3

আপনার CSV ফাইল অবস্থিত যদি একই ডিবি সঙ্গে, আপনি সরানোর প্রয়োজন স্থানীয় মধ্যে লোড ডেটা infile বা, আপনি ত্রুটি পাবেন

এই মাইএসকিউএল সংস্করণ সহ ব্যবহৃত কমান্ডের অনুমতি নেই


এটি আমার পক্ষে এটি হয়েছিল তবে তার পরে আমাকেও এখানে নেলসনের উত্তর
ডমিনিক

1

আরেকটি উপায় হ'ল এটি ব্যবহার করা mysqlimport ক্লায়েন্ট প্রোগ্রাম ।

আপনি নিম্নলিখিত হিসাবে এটি প্রার্থনা:

mysqlimport -uTheUsername -pThePassword --local yourDatabaseName tableName.txt

এটি একটি LOAD DATAবিবৃতি উত্পন্ন করে যা লোড tableName.txtহয়tableName টেবিলে ।

নিম্নলিখিত বিষয়গুলি মনে রাখবেন:

mysqlimportআপনার সরবরাহ করা ফাইল থেকে সারণির নাম নির্ধারণ করে; ফাইলের নাম শুরু থেকে প্রথম সময় অবধি টেবিলের নাম হিসাবে সমস্ত পাঠ্য ব্যবহার করা। সুতরাং, যদি আপনি একই টেবিলে বিভিন্ন ফাইল লোড করতে ইচ্ছুক আপনি তাদের মত পার্থক্য পারে tableName.1.txt, tableName.2.txt..., ইত্যাদি, উদাহরণস্বরূপ।


1

এটি আমার জন্য কিছুটা অদ্ভুত হয়ে উঠল, একদিন থেকে পরের দিন পর্যন্ত যে স্ক্রিপ্টটি কয়েক দিন ধরে কাজ করে চলেছে কেবল কাজ করা বন্ধ করে দেয়। মাইএসকিএল বা কোনও ধরণের আপগ্রেডের নতুন সংস্করণ ছিল না তবে আমি একই ত্রুটি পাচ্ছিলাম, তাই আমি সিএসভি ফাইলে সর্বশেষ চেষ্টা করব এবং লক্ষ্য করেছি যে রেখাগুলির শেষটি প্রত্যাশার পরিবর্তে 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.

1

আমি নীচে পদ্ধতিটি ব্যবহার করেছি, যার জন্য কনফিগারেশনের কোনও পরিবর্তন দরকার নেই , 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"

1

যদি মাইএসকিএল ৫.7 হয় তবে আপনি "স্থানীয়_ফর্ম" এর মতো বিশ্বব্যাপী চলক দেখান; " যা স্থানীয় পীড়ন স্থিতি দেবে, আপনি "সেট গ্লোবাল লোকাল_ইনফাইলে = চালু" ব্যবহার করে এটি চালু করতে পারেন।


0

ঠিক আছে, এখানে অদ্ভুত কিছু ঘটছে। এই কাজটি করতে, /etc/mysql/my.cnf এ কোনও কনফিগারেশন পরিবর্তন করার দরকার নেই। আপনাকে যা করতে হবে তা হ'ল টার্মিনালে বর্তমান মাইএসকিএল পরিষেবাটি পুনরায় চালু করতে হবে:

sudo service mysql restart

তারপরে যদি আমি বাগটি "পুনরায় তৈরি করতে" চাই, তবে আমি কেবল অ্যাপাচি পরিষেবাটি পুনরায় চালু করব:

sudo service apache2 restart

যা নিম্নলিখিত কমান্ডটি প্রবেশ করে আবার ঠিক করা যেতে পারে:

sudo service mysql restart

সুতরাং, দেখা যাচ্ছে যে অ্যাপাচি 2 এই বৈশিষ্ট্যটি আরম্ভ করার সময় অনুমতি না দেওয়ার জন্য কিছু করছে (যা মাইএসকিএল পরিষেবাটি পুনরায় আরম্ভ করলে বিপরীত / সংশোধন করা হয়)।

দেবিয়ান ভিত্তিক বিতরণগুলিতে বৈধ।

service mysqld restart
service httpd restart

রেডহ্যাট ভিত্তিক বিতরণগুলিতে বৈধ


0

আপনারা যারা LOCALলড ডেটা ইনফাইলটি আমার মতো কাজ করতে উত্তর খুঁজছেন তাদের পক্ষে এটি সম্ভবত কার্যকর হতে পারে। ভাল এটা আমার জন্য কাজ করেছে, তাই এখানে এটি যায়। perconaলিঙ্ক থেকে পদক্ষেপগুলি অনুসরণ করে আপনার মাইএসকিএল সার্ভার এবং ক্লায়েন্ট হিসাবে ইনস্টল করুন। ইনস্টলেশন চলাকালীন একটি পাসওয়ার্ড জিজ্ঞাসা করা হবে, সুতরাং একটি মনে রাখবেন যা আপনি মনে রাখবেন এবং এটি পরে ব্যবহার করবেন। একটি ইনস্টলেশন সম্পন্ন হয়েছে, আপনার সিস্টেমটি পুনরায় বুট করুন এবং সার্ভারটি চালু হয়ে চলছে কিনা তা পরীক্ষা করে terminalলিখুন mysql -u root -pএবং তারপরে পাসওয়ার্ড দিয়ে যান। LOAD DATA LOCAL INFILEএখনই কমান্ড চালানোর চেষ্টা করুন .. আশা করি এটি কার্যকর হয় :)

বিটিডাব্লু আমি উবুন্টু ১২.০৪-এ রুবি ১.৯.৩ এর সাথে রেল ২.৩ এ কাজ করছিলাম।


0

সমস্ত: স্পষ্টতই এটি নকশা করা হিসাবে কাজ করছে। দয়া করে 2019-7-23 বিভাগের নতুন রেফ ম্যান দেখুন, বিভাগ 6.1.6, লোড ডেটা লোকাল সহ সুরক্ষা সমস্যাগুলি


0

local_infileউভয় clientএবং mysqldবিভাগে যোগ করুন ।

[client]
local_infile=1
...

[mysqld]
local_infile=1
...

উইন্ডোজ এবং লিনাক্স উভয়ই মাইএসকিউএল 8.x এ পরীক্ষিত।


0

আমি 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 সরানো গুরুত্বপূর্ণ। অন্যথায় এটি কাজ করবে না।

উপরের সমস্ত পরামর্শের জন্য ধন্যবাদ। একটি সমন্বয় অবশেষে আমার জন্য কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.