শেল স্ক্রিপ্ট থেকে মাইএসকিউএল কমান্ড কীভাবে কার্যকর করা যায়?


131

আমি কীভাবে শেল স্ক্রিপ্টের মাধ্যমে একটি এসকিউএল কমান্ড কার্যকর করতে পারি যাতে আমি এটি স্বয়ংক্রিয় করতে পারি?

আমি একটি শেল স্ক্রিপ্ট ব্যবহার করে একটি এসকিউএল ফাইলে সংগৃহীত ডেটা পুনরুদ্ধার করতে চাই। আমি একটি সার্ভারের সাথে সংযোগ স্থাপন করতে এবং ডেটা পুনরুদ্ধার করতে চাই। কমান্ডটি এসএসএইচ কমান্ড লাইনের মাধ্যমে পৃথকভাবে কার্যকর করা হলে কাজ করে।

এই হুকুমটি আমি ব্যবহার করি:

mysql -h "server-name" -u root "password" "database-name" < "filename.sql"

এটি শেল স্ক্রিপ্ট কোড যা ফাইলটি তৈরি করে ds_fbids.sqlএবং এটিকে মাইএসকিএলে পাইপ দেয়।

perl fb_apps_frm_fb.pl
perl fb_new_spider.pl ds_fbids.txt ds_fbids.sql
mysql -h dbservername -u username -ppassword dbname < ds_fbids.sql

এটি করার সঠিক উপায় কী?

উত্তর:


176

-pএকটি পাসওয়ার্ড প্রেরণের জন্য আপনাকে পতাকা ব্যবহার করতে হবে। এবং এটি জটিল কারণ আপনার অবশ্যই -pপাসওয়ার্ড এবং পাসওয়ার্ডের মধ্যে কোনও স্থান নেই ।

$ mysql -h "server-name" -u "root" "-pXXXXXXXX" "database-name" < "filename.sql"

যদি আপনি কোনও স্পেস ব্যবহার করেন তবে -pএটি মাইএসকিএল ক্লায়েন্ট আপনাকে পাসওয়ার্ডের জন্য ইন্টারেক্টিভ অনুরোধ জানায় এবং তারপরে এটি পরবর্তী কমান্ড আর্গুমেন্টটিকে ডাটাবেস-নাম হিসাবে ব্যাখ্যা করে:

$ mysql -h "server-name" -u "root" -p "XXXXXXXX" "database-name" < "filename.sql"
Enter password: <you type it in here>
ERROR 1049 (42000): Unknown database 'XXXXXXXX'

প্রকৃতপক্ষে, আমি ব্যবহারকারী এবং পাসওয়ার্ডটি ~ / .my.cnf এ সঞ্চয় করতে পছন্দ করি তাই কমান্ড-লাইনে একেবারেই লাগাতে হবে না:

[client]
user = root
password = XXXXXXXX

তারপর:

$ mysql -h "server-name" "database-name" < "filename.sql"

আপনার মন্তব্য পুনরায়:

আমি উপরের মতো কমান্ড লাইনে এবং শেল স্ক্রিপ্টগুলিতে ব্যাচ-মোড মাইএসকিএল কমান্ডগুলি চালিত করি। আপনার শেল স্ক্রিপ্টের মধ্যে কী কী আছে তা নির্ণয় করা শক্ত, কারণ আপনি সঠিক স্ক্রিপ্ট বা কোনও ত্রুটি আউটপুট ভাগ করেননি। আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি উপরে আপনার মূল প্রশ্নটি সম্পাদনা করুন এবং কী ভুল হয় তার উদাহরণ সরবরাহ করুন।

এছাড়াও যখন আমি শেল স্ক্রিপ্টের সমস্যা সমাধান করছি তখন আমি -xপতাকাটি ব্যবহার করি যাতে আমি দেখতে পাচ্ছি যে এটি প্রতিটি কমান্ড কীভাবে সম্পাদন করছে:

$ bash -x myscript.sh

দ্রুত প্রতিক্রিয়া জন্য ধন্যবাদ। আমি নিজেই কমান্ড লাইনে পাসওয়ার্ড রেখে ক্লান্ত হয়েছি। আসল সমস্যা হ'ল আমি এই কমান্ডটি .sh ফাইলে রাখছি এবং তারপরে এই শেল স্ক্রিপ্টটি চালাচ্ছি। ফাইলের কমান্ডটি কমান্ড লাইনে চালিত হয় না, তবে একই কমান্ডটি ঠিকঠাকভাবে কাজ করে যখন আমি কমান্ড লাইনে কেবল কমান্ডটি চালিত করি।
এমইউএফসি

+ mysql -h dbservername -u user-name -ppassword dbname</br> : No such file or directoryids.sql</br> + $'\r' : command not found2:এটি আমি পেয়েছি ত্রুটি বার্তাটি
এমইউএফসি

ঠিক আছে, তারপরে আমি অনুমান করব যে আপনার বর্তমান ওয়ার্কিং ডিরেক্টরি যেখানে ids.sql ফাইলটি অবস্থিত সেখানে নয়। এছাড়াও আপনি আপনার স্ক্রিপ্টে নতুন লাইনগুলি এম্বেড করেছেন।
বিল কারভিন

আমার কাছে প্রতিটি কমান্ডের পরে আমার শেল স্ক্রিপ্টে নতুন লাইন এম্বেড করা আছে। আমার শেল স্ক্রিপ্টের সমস্ত হ'ল 3 টি কমান্ড লাইন কমান্ড যা আমি পৃথকভাবে চালাতে চাই না তাই আমি তাদেরকে আমার হস্তক্ষেপ ছাড়াই চালানোর জন্য একটি শেল স্ক্রিপ্ট তৈরি করেছি এবং আমি প্রতিটি কমন্ডে নিউলাইন আফটার রেখেছি। এটা কি সমস্যা সৃষ্টি করছে?
এমইউএফসি

-pপাসওয়ার্ডটি নাল বা ফাঁকা স্ট্রিং থাকলে এড়ানো ভাল , সম্ভবত আপনি নিজের পোস্টটি আপডেট করতে পারবেন? :)
জেমস ওরাভেক

118

এই বাক্য গঠনটি ব্যবহার করুন:

mysql -u $user -p$passsword -Bse "command1;command2;....;commandn"

8
আমি গুগল থেকে এই পৃষ্ঠায় অবতরণ করেছি এবং এটি আমার প্রত্যাশা করা সমাধান (প্রশ্নের শিরোনামের সাথে মিলছে)।
জনাকা আর রাজাপক্ষ

15
ম্যানুয়াল থেকে অপশনগুলি সম্পর্কে আরও কিছু বিশদ: -বি ব্যাচের জন্য, কলাম বিভাজক হিসাবে ট্যাব ব্যবহার করে মুদ্রণ ফলাফলগুলি এবং প্রতিটি লাইনে একটি নতুন লাইনের সাথে। এই বিকল্পের সাথে, মাইএসকিএল ইতিহাস ফাইলটি ব্যবহার করে না। ব্যাচ মোডের ফলাফল অনিয়ন্ত্রিত আউটপুট ফর্ম্যাট এবং বিশেষ অক্ষরগুলির পলায়নের জন্য। - নিঃশব্দ মোড। কম আউটপুট উত্পাদন। -e স্টেটমেন্ট চালানো এবং প্রস্থান হয়
wranvaud

আপনার সাহায্যের জন্য ধন্যবাদ! :)
হাওতাং

এটি একটি বংশগত সঙ্গে চালাতে পারে?
zx1986

1
@ zx1986 হ্যাঁ এবং না, হারডোকের কাছে। আপনি এটি কীভাবে ব্যবহার করছেন তা নির্ভর করে। "command1;command2;....;commandn"এই উত্তরের অংশটি প্রতিস্থাপন করতে এটি ব্যবহার করা কার্যকর হবে না। ওপি'র সিনট্যাক্সে পুনঃনির্দেশিত ফাইলটির ব্যবহার প্রতিস্থাপন করতে এটি ব্যবহার করা কাজ করতে পারে । আমি এই প্রশ্নের আমার উত্তরে এই বিষয়টিকে সম্বোধন করেছি ।
চিন্দ্রবাবা

45

পূর্বের সমস্ত উত্তর দুর্দান্ত। এটি যদি একটি সরল, এক লাইনের এসকিএল কমান্ডটি চালাতে চান তবে আপনি -e বিকল্পটি ব্যবহার করতে পারেন।

mysql -h <host> -u<user> -p<password> database -e \
  "SELECT * FROM blah WHERE foo='bar';"

ডাবল ("") কোটের মধ্যে ক্যোয়ারী আমার যা করা দরকার তা ছিল। ধন্যবাদ
user3132107

আমি দেখতে পাচ্ছি, এবং আমি এটি নিয়েছি আপনার ক্যোয়ারির শেষে সেমিকোলনটি অন্তর্ভুক্ত করা দরকার?
লরি

19

কীভাবে একটি এসকিউএল স্ক্রিপ্ট কার্যকর করা যায়, এই সিনট্যাক্সটি ব্যবহার করুন:

mysql --host= localhost --user=root --password=xxxxxx  -e "source dbscript.sql"

আপনি হোস্টকে লোকালহোস্ট হিসাবে ব্যবহার করলে আপনার এটির উল্লেখ করার দরকার নেই। আপনি এটি ব্যবহার করতে পারেন:

mysql --user=root --password=xxxxxx  -e "source dbscript.sql"

এটি উইন্ডোজ এবং লিনাক্সের জন্য কাজ করা উচিত।

যদি পাসওয়ার্ডের সামগ্রীতে একটি !(বিস্মৃত চিহ্ন) থাকে তবে আপনার \সামনে একটি (ব্যাকস্ল্যাশ) যুক্ত করা উচিত ।


1
কীভাবে ডাটাবেস নির্দিষ্ট করবেন? এটি -e এর ভিতরে থাকা উচিত - যেমন "abc ব্যবহার; উত্স dbscript.sql"?
আব্দুল মুনির

9

প্রশ্নের মূলটির ইতিমধ্যে বেশ কয়েকবার উত্তর দেওয়া হয়েছে, আমি কেবল ভেবেছিলাম যে আমি শেল স্ক্রিপ্টিং এবং এসকিউএল উভয় ক্ষেত্রে ব্যাকটিকগুলি যুক্ত করেছি। কোনও সারণী বা ডাটাবেসের নাম নির্দিষ্ট করে দেওয়ার জন্য যদি আপনাকে এসকিউএল এ ব্যবহার করতে হয় তবে আপনাকে এগুলি শেল স্ক্রিপ্টে এড়িয়ে চলতে হবে:

mysql -p=password -u "root" -Bse "CREATE DATABASE \`${1}_database\`;
CREATE USER '$1'@'%' IDENTIFIED BY '$2';
GRANT ALL PRIVILEGES ON `${1}_database`.* TO '$1'@'%' WITH GRANT OPTION;"

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


5
mysql -h "hostname" -u usr_name -pPASSWD "db_name" < sql_script_file

(প্রয়োজনে পুরো পথ ব্যবহার করুন sql_script_file)

আপনি যদি কোনও ফাইলের আউটপুট পুনর্নির্দেশ করতে চান

mysql -h "hostname" -u usr_name -pPASSWD "db_name" < sql_script_file > out_file

@ গুস, প্রথমে মূল্যবান মন্তব্যের জন্য ধন্যবাদ। এটি আমার জন্য কবজির মতো কাজ করেছিল। আমি আউটপুটটি একটি এক্সেল বা .csv ফাইল হতে চাই। আমি কীভাবে এটি অর্জন করতে পারি? আগাম ধন্যবাদ.
অ্যাশ_আর_পর্ল

@ আশ_আর_প্রেল আমি কেবল এই উত্তরটি সম্পাদনা করেছি, আমাকে লতা না ধন্যবাদ, এটি তার উত্তর। আপনার যদি নিজের একটি প্রশ্ন থাকে এবং আপনি ইতিমধ্যে নিজেরাই সমাধান সন্ধান করার চেষ্টা করেছেন তবে আমি আপনাকে একটি প্রশ্ন তৈরি করার পরামর্শ দিচ্ছি। আপনি কী চেষ্টা করেছেন, কীভাবে এটি ব্যর্থ হয়েছে এবং লোকেরা আপনাকে একটি পূর্ণ, সম্পূর্ণ উত্তর দিতে পারে (এবং এর জন্য পয়েন্ট পেতে পারে) সেভাবে আপনি বিশদটি দিতে পারেন।
Gus

5

আপনি ভুলে গেছেন -pবা --password=(পরেরটি আরও ভাল পঠনযোগ্য):

mysql -h "$server_name" "--user=$user" "--password=$password" "--database=$database_name" < "filename.sql"

(যদি আপনি নিশ্চিত হন যে আপনার শংসাপত্রগুলি / নামগুলিতে স্থান বা শেল-বিশেষ অক্ষর নেই contain তবে উদ্ধৃতিগুলি অপ্রয়োজনীয়)

নোট করুন যে ম্যানপেজটিও বলেছে যে কমান্ড লাইনে শংসাপত্রগুলি সরবরাহ করা নিরাপত্তাহীন। সুতরাং my.cnf সম্পর্কে বিলের পরামর্শ অনুসরণ করুন।


4

আপনি সার্ভারের পাসওয়ার্ডটি পাস করার জন্য -p ব্যবহার করার আগে বলেছিলেন।

তবে আমি এটি সুপারিশ করছি:

mysql -h "hostaddress" -u "username" -p "database-name" < "sqlfile.sql"

লক্ষ্য করুন পাসওয়ার্ডটি নেই। এটি আপনাকে পাসওয়ার্ডের জন্য অনুরোধ করবে। আমি এটি টাইপ করব। যাতে আপনার পাসওয়ার্ড সার্ভার কমান্ড লাইনের ইতিহাসে লগইন না করে।

এটি একটি প্রাথমিক সুরক্ষা ব্যবস্থা।

সুরক্ষা যদি উদ্বেগের বিষয় না হয় তবে আমি অস্থায়ীভাবে ডাটাবেস ব্যবহারকারী থেকে পাসওয়ার্ডটি সরিয়ে ফেলব। তারপরে আমদানির পরে - এটি আবার যুক্ত করুন।

এই একই পাসওয়ার্ড ভাগ করে নিতে পারে আপনার অন্য কোনও অ্যাকাউন্টের সাথে আপস করা হবে না।

এটিও উপস্থিত হয় যে আপনার শেল স্ক্রিপ্টে আপনি যে ফাইলটি আমদানির চেষ্টা করছেন সেটি আসলে বিদ্যমান কিনা তা দেখার জন্য আপনি অপেক্ষা / চেক করছেন না। পার্ল স্ক্রিপ্টটি এখনও শেষ হয়নি।


1
আপনি প্রশ্নের "স্বয়ংক্রিয়" অংশটি মিস করেছেন এবং অস্থায়ীভাবে পাসওয়ার্ড অপসারণ করা সত্যিই খারাপ ধারণা।
পয়েন্টেড ইয়ারস

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

আমি যদি বিভ্রান্তি তৈরি করি তবে দুঃখিত। অটোমেটেড বলতে আমি যা বোঝাতে চেয়েছি তা হল, আমার কাছে দুটি পার্ল স্ক্রিপ্ট রয়েছে যা .sql ফাইল তৈরি করতে ব্যবহৃত হয়, তবে সেই ফাইলটি ডিবিতে ফেলার জন্য কমান্ডটি শেল স্ক্রিপ্ট দ্বারা চালিত হয় না, তবে আমি যদি সেই আদেশটি চালাই তবে এটি সম্পূর্ণ ফাইলটি কাজ করে একটি কমান্ড লাইনে। কমান্ড লাইনে সেই কমান্ডটি চালানোর প্রচেষ্টাটি আমি স্বীকার করতে চাই এবং নিজেই এটি শেল স্ক্রিপ্টের মাধ্যমে চালাতে চাই।
এমইউএফসি

1
বৈভব: যদি আপনি আপনার প্রশ্নের ভিতরে সত্যিকারের শেল স্ক্রিপ্টটি রাখতে পারেন তবে আমি আরও সাহায্য করতে সক্ষম হতে পারি।
স্টার্লিং হ্যামিল্টন

perl fb_apps_frm_fb.pl</br> Perl fb_new_spider.pl ds_fbids.txt ds_fbids.sql` </br>mysql -h dbservername -u username -ppassword dbname < ds_fbids.sql
MUFC


3

উত্পন্ন .sqlফাইলটি আমদানির প্রক্রিয়াটি "স্বয়ংক্রিয়" করার জন্য , সমস্ত ট্র্যাপগুলি এড়িয়ে গিয়ে ফাইলগুলি পাস করার চেষ্টা করার মধ্যে লুকানো যেতে পারে stdinএবং stdoutকেবল মাইএসকিউএলকে মাইএসকিউএল কমান্ডটি .sqlব্যবহার করে উত্পন্ন ফাইলটি কার্যকর করতে বলে toSOURCE

ক্ষিতিজ সুদ থেকে সংক্ষেপে সংক্ষিপ্ত, তবে দুর্দান্ত উত্তরটি উত্তম সূচনার পয়েন্টটি দেয়। সংক্ষেপে, ক্ষিতিজ সুদের সিনট্যাক্স অনুযায়ী ওপি'র কমান্ডটি সংশোধন করুন এবং কমান্ডের সাথে কমান্ডগুলি প্রতিস্থাপন করুন SOURCE:

#!/bin/bash
mysql -u$user -p$password $dbname -Bse "SOURCE ds_fbids.sql
SOURCE ds_fbidx.sql"

উত্পন্ন .sqlফাইলের মধ্যে ডাটাবেসের নাম অন্তর্ভুক্ত করা থাকলে , এটি কমান্ড থেকে বাদ দেওয়া যাবে।

এখানে অনুমান করা হয় যে উত্পন্ন ফাইলটি তার নিজের হিসাবে একটি ফাইল হিসাবে বৈধ.sql । ফাইলটি পুনঃনির্দেশিত, পাইপযুক্ত বা শেল দ্বারা পরিচালিত অন্য কোনও পদ্ধতিতে না করে শেলের কারণে উত্পন্ন আউটপুটে কোনও অক্ষর থেকে রক্ষা পাওয়ার কোনও সমস্যা নেই। একটি .sqlফাইলের মধ্যে যা পালাতে হবে সে সম্পর্কে নিয়মগুলি অবশ্যই প্রয়োগ করা হয়।

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


আমি যে সংক্ষিপ্ত উত্তরে উল্লেখ করেছি একটি মন্তব্যে (প্রশ্ন?) সম্বোধন করার জন্য: না, শেল কমান্ড যেমন দেওয়া হয়েছে তেমন এটি কোনও হারডোক সিনট্যাক্সের সাহায্যে ব্যবহার করা যাবে না। HEREDOC পুনর্নির্দেশ সংস্করণ সিনট্যাক্সে ব্যবহার করা যেতে পারে ( -Bseবিকল্প ছাড়াই ), যেহেতু I / O পুনর্নির্দেশটি হেরডোকের চারপাশে নির্মিত। যদি আপনার HEREDOC এর কার্যকারিতা প্রয়োজন হয় .sqlতবে এটি কোনও ফাইলের তৈরিতে এটি অস্থায়ী হলেও এমনটি হওয়া ভাল এবং মাইএসকিউএল ব্যাচ লাইনের সাথে চালিত করতে "ফাইলটি" কমান্ড "হিসাবে ব্যবহার করা ভাল।

#!/bin/bash
cat >temp.sql <<SQL_STATEMENTS
...
SELECT \`column_name\` FROM \`table_name\` WHERE \`column_name\`='$shell_variable';
...
SQL_STATEMENTS
mysql -u $user -p$password $db_name -Be "SOURCE temp.sql"
rm -f temp.sql

মনে রাখবেন যে শেল সম্প্রসারণের কারণে আপনি শ্বেত এবং পরিবেশ পরিবর্তনশীলগুলি HEREDOC এর মধ্যে ব্যবহার করতে পারেন। ডাউন-সাইডটি হ'ল আপনাকে অবশ্যই প্রতিটি ব্যাকটিক এড়িয়ে চলতে হবে। মাইএসকিউএল এগুলি সনাক্তকারী হিসাবে ডিলিমিটার হিসাবে ব্যবহার করে তবে শেলটি, যা প্রথমে স্ট্রিং পায়, এগুলিকে এক্সিকিউটেবল কমান্ড ডিলিমিটার হিসাবে ব্যবহার করে। মাইএসকিউএল কমান্ডের একক ব্যাকটিকিতে পালানো মিস করুন এবং পুরো জিনিসটি ত্রুটির সাথে বিস্ফোরিত হয়। HEREDOC এর জন্য একটি উদ্ধৃত সীমাবদ্ধতা ব্যবহার করে পুরো বিষয়টি সমাধান করা যেতে পারে:

#!/bin/bash
cat >temp.sql <<'SQL_STATEMENTS'
...
SELECT `column_name` FROM `table_name` WHERE `column_name`='constant_value';
...
SQL_STATEMENTS
mysql -u $user -p$password $db_name -Be "SOURCE temp.sql"
rm -f temp.sql

শেল সম্প্রসারণটি সেভাবে অপসারণ করা ব্যাকটিক্স এবং অন্যান্য শেল-বিশেষ অক্ষরগুলি থেকে পালানোর প্রয়োজনীয়তা দূর করে। এটি এর মধ্যে শেল এবং পরিবেশের ভেরিয়েবলগুলি ব্যবহার করার ক্ষমতাও সরিয়ে দেয়। এটি প্রায়শই শেল স্ক্রিপ্টের সাথে শুরু করার জন্য একটি হারডোক ব্যবহার করার সুবিধাগুলি সরিয়ে দেয়।

অন্য বিকল্পটি হ'ল ব্যাশ সিনট্যাক্স সংস্করণ (এর সাথে -Bse) সহ ব্যাশটিতে অনুমোদিত মাল্টি-লাইন উদ্ধৃত স্ট্রিংগুলি ব্যবহার করা । আমি অন্য শাঁসগুলি জানি না, তাই তারা যদি এটিতেও কাজ করে তবে আমি বলতে পারি না। আপনার যে কোনওভাবে কমান্ডের মাধ্যমে একাধিক .sqlফাইল চালিত করার জন্য এটি ব্যবহার করতে হবে SOURCE, যেহেতু এটি অন্য মাইএসকিউএল কমান্ডগুলি যেমন কোনও দ্বারা শেষ হয় না; , এবং প্রতি লাইনে কেবল একটির অনুমতি রয়েছে। মাল্টি-লাইন স্ট্রিং শেল প্রসারণের স্বাভাবিক প্রভাব সহ একক বা ডাবল উদ্ধৃতিযুক্ত হতে পারে। এতে ব্যাকটিক্স ইত্যাদির জন্য HEREDOC সিনট্যাক্স ব্যবহারের মতো একই ক্যাভেট রয়েছে etc.

.sqlওপি-র মতো ফাইল তৈরি করার জন্য একটি স্ক্রিপ্টিং ভাষা, পার্ল, পাইথন ইত্যাদি SOURCEব্যবহার করা এবং তারপরে সরল কমান্ড সিনট্যাক্স ব্যবহার করে সেই ফাইলটি তৈরি করার সম্ভাব্যতর উন্নত সমাধান হতে পারে । স্ক্র্যাপিংয়ের ভাষাগুলি শেলের চেয়ে স্ট্রিং ম্যানিপুলেশনে অনেক ভাল, এবং মাইএসকিউএল নিয়ে কাজ করার সময় প্রয়োজনীয় উদ্ধৃতি এবং পালানোর প্রয়োজনের জন্য বেশিরভাগ অন্তর্নিহিত পদ্ধতি রয়েছে।


2

ক্রোন ব্যবহৃত শেল স্ক্রিপ্ট থেকে মাইএসকিএল অ্যাক্সেস করার জন্য একটি গুরুত্বপূর্ণ বিবেচনা হ'ল মাইএসকিএল একটি .my.cnf লোড করার জন্য নির্ধারিত লগ ইন করা ব্যবহারকারীকে দেখায়।

এটি ক্রোন দিয়ে কাজ করে না। এটি আপনি বিভ্রান্ত হয়ে উঠতে পারেন যদি আপনি su / sudo ব্যবহার করছেন হিসাবে লগ ইন করা ব্যবহারকারী সম্ভবত আপনি যে ব্যবহারকারী হিসাবে চলছেন তা নাও হতে পারে।

আমি এরকম কিছু ব্যবহার করি:

mysql --defaults-extra-file=/path/to/specific/.my.cnf -e 'SELECT something FROM sometable'

কেবল নিশ্চিত হয়ে নিন যে ব্যবহারকারী এবং গোষ্ঠীর মালিকানা এবং অনুমতিগুলি .my.cnf ফাইলে যথাযথভাবে এবং শক্তভাবে সেট করা আছে।


1
#!/bin/sh
#Procedures = update
#Scheduled at : Every 00.05 

v_path=/etc/database_jobs
v_cnt=0

MAILTO="indd@abc.in joanson@abc.in sturt@abc.in"
touch "$v_path/db_db_log.log"

#test
mysql -uusername -ppassword -h111.111.111.111 db_name -e "CALL functionName()" > $v_path/db_db_log.log 2>&1
if [ "$?" -eq 0 ]
  then
   v_cnt=`expr $v_cnt + 1`
  mail -s "db Attendance Update has been run successfully" $MAILTO < $v_path/db_db_log.log
 else
   mail -s "Alert : db Attendance Update has been failed" $MAILTO < $v_path/db_db_log.log
   exit
fi

0
mysql_config_editor set --login-path=storedPasswordKey --host=localhost --user=root --password

সুরক্ষিত পাসওয়ার্ড সহ আমি কীভাবে একটি কমান্ড লাইন কার্যকর করব ?? কনফিগার সম্পাদক ব্যবহার করুন !!!

Mysql 5.6.6 হিসাবে আপনি একটি কনফিগার ফাইলে পাসওয়ার্ড সংরক্ষণ করতে পারেন এবং তারপরে ক্লাইম কমান্ডগুলি চালিত করতে পারেন ....

mysql --login-path=storedPasswordKey ....

--login-path পরিবর্তনশীল ... হোস্ট, ব্যবহারকারী এবং পাসওয়ার্ড প্রতিস্থাপন করে। দুর্দান্ত অধিকার!



0

আমি একটি শেল স্ক্রিপ্ট লিখেছি যা সম্পত্তি ফাইল থেকে ডেটা পড়বে এবং তারপরে শেল স্ক্রিপ্টে মাইএসকিএল স্ক্রিপ্ট চালাবে। এটি ভাগ করে নেওয়া অন্যকে সাহায্য করতে পারে।

#!/bin/bash
    PROPERTY_FILE=filename.properties

    function getProperty {
       PROP_KEY=$1
       PROP_VALUE=`cat $PROPERTY_FILE | grep "$PROP_KEY" | cut -d'=' -f2`
       echo $PROP_VALUE
    }

    echo "# Reading property from $PROPERTY_FILE"
    DB_USER=$(getProperty "db.username")
    DB_PASS=$(getProperty "db.password")
    ROOT_LOC=$(getProperty "root.location")
    echo $DB_USER
    echo $DB_PASS
    echo $ROOT_LOC
    echo "Writing on DB ... "
    mysql -u$DB_USER -p$DB_PASS dbname<<EOFMYSQL

    update tablename set tablename.value_ = "$ROOT_LOC" where tablename.name_="Root directory location";
    EOFMYSQL
    echo "Writing root location($ROOT_LOC) is done ... "
    counter=`mysql -u${DB_USER} -p${DB_PASS} dbname -e "select count(*) from tablename where tablename.name_='Root directory location' and tablename.value_ = '$ROOT_LOC';" | grep -v "count"`;

    if [ "$counter" = "1" ]
    then
    echo "ROOT location updated"
    fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.