ফাইলের জন্য মাইএসকিউএল ডেটা আউটপুট করা যায় না


13

আমি একটি মাইএসকিউএল টেবিল থেকে একটি ফাইলে ডাটা আউটপুট দেওয়ার চেষ্টা করছি তবে অনুমতি ত্রুটি পেয়েছি:

$ pwd
/home/dotancohen
$ mkdir in
$ chmod 777 in/
$ mysql -ugs -p
mysql> USE someDatabase;
mysql> SELECT * FROM data INTO OUTFILE '/home/dotancohen/in/data.csv';
ERROR 1045 (28000): Access denied for user 'gs'@'localhost' (using password: YES)
mysql>

যদি প্রশ্নে থাকা ডিরেক্টরিটি 777 এ ছোডে থাকে তবে মাইএসকিউএল ব্যবহারকারী ফাইলটি কেন লিখতে পারবেন না? আকর্ষণীয়ভাবে যথেষ্ট, আমি / tmp / তেও লিখতে পারি না।

সম্পাদনা: দেখে মনে হচ্ছে ডিবি ব্যবহারকারীর যথাযথ মাইএসকিউএল অনুমতি রয়েছে:

mysql> show grants;
+----------------------------------------------------------------------------------+
| Grants for gs@localhost                                                          |
+----------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'gs'@'localhost' IDENTIFIED BY PASSWORD 'somePassword'     | 
| GRANT ALL PRIVILEGES ON `gs\_%`.* TO 'gs'@'localhost'                            | 
+----------------------------------------------------------------------------------+
2 rows in set (0.01 sec)

2
আপনাকে পুরো ডিরেক্টরি ট্রিতে মাইএসকিউএল অ্যাক্সেসের অধিকার মঞ্জুর করতে হবে। inমাইএসকিউএল অ্যাক্সেস করতে না পারলে এর উপর অধিকার প্রদান অর্থহীন dotanchoen। অন্য কথায়, ব্যাংক ভল্টের সেফটি ডিপোস্ট বক্সটি খোলা রেখে দেওয়া যেতে পারে, তবে যদি ব্যাংক ভল্টের দরজাটি তালাবদ্ধ থাকে তবে আপনি বাক্সটিতে প্রবেশ করতে পারবেন না। আপনার gsব্যবহারকারীর অবশ্যই FILEসেই ক্যোয়ারীটি সম্পাদন করার জন্য মাইএসকিএল অধিকার থাকতে হবে।

সমস্যাটি কি আপনি বেছে বেছে বেছে নিতে পারেন না? MySQL অনুমতিগুলি ডিরেক্টরি অনুমতি দ্বারা নিয়ন্ত্রিত হয় না। নির্দিষ্ট mysql ব্যবহারকারী হিসাবে চালনার জন্য আপনাকে mysql -u <ব্যবহারকারীর নাম> -p ব্যবহার করতে হবে। কোনও ডিবিতে ব্যবহারকারীকে অ্যাক্সেস দিতে, একবার দেখুন MySQL অনুদান। dev.mysql.com/doc/refman/5.1/en/grant.html

ধন্যবাদ, এই ব্যবহারকারীর SELECTঅনুমতি আছে। আমি প্রায়শই এই ব্যবহারকারী হিসাবে ডাটাবেস ব্রাউজ করি।
dotancohen

ধন্যবাদ, মার্ক, আমি এটাই ভয় পেয়েছিলাম। সুতরাং আমার কাছে এমন একটি "ইনবক্স" ফোল্ডার থাকতে পারে না যা অন্য ব্যবহারকারীরা আমার হোম ডিরেক্টরিতেও / পড়তে না দিয়ে লেখতে পারেন?
dotancohen

2
মাইএসকিউএল ডক্সFILE দ্বারা বর্ণিত হিসাবে ব্যবহারকারীর অধিকার রয়েছে তা নিশ্চিত করুন
মাইক পার্সেল

উত্তর:


12

মাইএসকিউএল ডকুমেন্টেশন অনুযায়ী নির্বাচন করুন ... ইন আউটফাইলে

INTO OUTFILE বা INTO DUMPFILE দ্বারা নির্মিত যে কোনও ফাইল সার্ভার হোস্টের সমস্ত ব্যবহারকারীদের দ্বারা লিখনযোগ্য। এর কারণ হ'ল মাইএসকিউএল সার্ভার এমন ফাইল তৈরি করতে পারে না যার ব্যবহারকারীর অ্যাকাউন্টের অধীনে অন্য কারও মালিকানা রয়েছে it (এটি এবং অন্যান্য কারণে আপনার কখনই মাইএসকিএলএলডি চালানো উচিত নয়)) সুতরাং ফাইলটি অবশ্যই বিশ্ব-লিখনযোগ্য হতে হবে যাতে আপনি এর সামগ্রীগুলি পরিচালনা করতে পারেন ip

নীচে আপনার SELECT INTO OUTFILE/ var / lib / mysql এ আউটপুট করা উচিত

SELECT * FROM data INTO OUTFILE 'data.csv';

অবশ্যই, আপনাকে জিএস @ লোকালহোস্টে ফাইল ফাইলের অনুমতি আছে কিনা তা নিশ্চিত করতে হবে।

এই অনুমতি দেওয়ার দুটি উপায় রয়েছে

পদ্ধতি # 1

GRANT FILE ON *.* TO 'gs'@'localhost';

পদ্ধতি # 2

UPDATE mysql.user SET File_priv = 'Y' WHERE user='gs' AND host='localhost';
FLUSH PRIVILEGES;

আপডেট 2012-05-01 07:09 ইডিটি

নিজেকে ফাইল ফাইলের সুবিধা দেওয়ার জন্য নিম্নলিখিতটি করুন:

  • পদক্ষেপ 01) service mysql restart --skip-networking --skip-grant-tables
  • পদক্ষেপ 02) mysql <hit enter>
  • পদক্ষেপ 03) UPDATE mysql.user SET File_priv = 'Y' WHERE user='gs' AND host='localhost';
  • পদক্ষেপ 04) exit
  • পদক্ষেপ 05) service mysql restart

ধন্যবাদ। আমি আউটপুট দিয়ে প্রশ্ন আপডেট SHOW GRANTS। দেখে মনে হচ্ছে ডিবি ব্যবহারকারীর যথাযথ অনুমতি থাকা উচিত।
dotancohen

ডিবি ব্যবহারকারীর যথাযথ অনুমতি নেই। ফাইলের অধিকার GRANT ALL PRIVILEGES ON *.*কেবলমাত্র যেমন RELOADএবং এর সাথে কোনও ব্যবহারকারীকে দেওয়া হয় SHUTDOWN। এটি তাই কারণ এটি বিশ্বব্যাপী প্রশাসনিক সুবিধা privile GRANT ALLআপনার বিশেষাধিকারটি কেবল gsডাটাবেসের জন্য ।
রোল্যান্ডোমাইএসকিউএলডিবিএ

1

বিভিন্ন বিতরণ এবং ওএসগুলি সমস্ত আউটফাইলেগুলির জন্য গন্তব্যগুলি হ্যান্ডেল করে না ।

উদাহরণস্বরূপ, সকেট ব্যবহার করে লিনাক্সে মাইএসকিএলডি ডেমন চালানোর সময়, আউটফিল কখনও কখনও /tmpডিরেক্টরিতে লেখা হয় । কোনও বড় বিষয় নয়, এটি কেবলমাত্র আউটফাইল পদ্ধতির ব্যবহারের ত্রুটি রয়েছে, যেমন অনুমতি নিয়ে কাজ করা এবং ফাইলটি কোথায় গেছে তা সন্ধান করে।

যেহেতু এই প্রশ্নের উদ্দেশ্যটি নির্দিষ্টভাবে "একটি আউটফিল কীভাবে ব্যবহার করবেন" নয়, তবে আপনি কেবল কোনও মাইএসকিউএল ডেটা একটি ফাইলে ক্যাপচার করতে চাইছেন, এখানে একটি বিকল্প রয়েছে যা আপনার ফাইল ফাইলের অনুমতি ইত্যাদির সাথে ঘুরে বেড়াতে হবে না etc ।

$ (echo 'SELECT * FROM data' | mysql -ugs -p[password])> /home/dotancohen/in/data.csv

এর আউটপুটটি ডিফল্টরূপে ট্যাব-সীমাবদ্ধ। কমাগুলির sedজন্য, ফাইলটিতে লেখার আগে কেবল এটির মাধ্যমে কিছু বা পাইপ করুন।


1

আমি এই পৃষ্ঠা এবং স্ট্যাকওভারফ্লোয়ের অনেকগুলি পৃষ্ঠাতে পরামর্শগুলি বোঝার চেষ্টা করে ঘন্টা ব্যয় করেছি।

আমি মাইএসকিএলে অনুমতিগুলি কীভাবে পরিবর্তন করেছি তা বিচার্য নয়, আমি কাজ করার জন্য কিছুই পেতে পারি না।

আমি যে অনুমতি দিয়ে শুরু করেছি সেগুলিতে আমি আবার ফিরে এসেছি।

শেষ পর্যন্ত আমার পক্ষে যা কাজ করেছে তা অন্যের পরামর্শের চেয়ে সহজ ছিল:

echo "select id, emailAddress FROM contacts" | mysql --user=myusername --password mydatabasename > /home/my_output_file.tsv


1
বাশ সিএমএল করার সময় আপনার পদ্ধতিটি ব্যবহারের জন্য ভাল। তবে ওপিতে প্রশ্নটি মাইএসকিউএল ক্লায়েন্ট সি এল এল থেকে কোনও ফাইলে কীভাবে ডেটা আউটপুট করবেন সে সম্পর্কে জিজ্ঞাসা করে।
dotancohen

0

উপরে উল্লিখিত সিএসভিতে ডেটা আউটপুট দেওয়ার দুটি পদ্ধতি সম্পর্কে (প্রকৃতপক্ষে টিএসভি হওয়া উচিত) আমি খুঁজে পেয়েছি যে আপনি যে রফতানি করছেন সেগুলিতে যদি খালি মান থাকে তবে এমন একটি ঝুঁকি রয়েছে যে ভুল তথ্য বিভ্রান্তির কারণে ডেটা বিভ্রান্ত হতে পারে সংশ্লিষ্ট কলামগুলিতে ডেটা।

পুনরুদ্ধারের জন্য ডেটা অখণ্ডতার জন্য উদ্বেগের সাথে, আমি এই ওয়েবসাইটটি পেয়েছি:

https://www.eversql.com/exporting-mysql-schema-structure-to-xml-using-mysql-clients/

এটি উল্লেখ করেছে যে --xmlবিকল্পটি mysqldumpXML ফর্ম্যাটে ডেটা রফতানির অনুমতি দেয় যা কাস্টম স্ক্রিপ্ট দ্বারা টিএসভি সহ প্রয়োজনীয় কোনও ফর্ম্যাটে পার্স করা যায়।

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