টার্মিনালের মধ্যে থেকে মাইএসকিএল ব্যবহার করে সতর্কতা বার্তাগুলি দমন করে তবে ব্যাশ স্ক্রিপ্টে পাসওয়ার্ড লেখা হয়


273

আমি যখন টার্মিনালের মধ্যে থেকে মাইএসকিউএলে নিম্নলিখিত কমান্ডটি চালানোর চেষ্টা করেছি:

mysql -u $user -p$password -e "statement"

কার্যকর করা প্রত্যাশা মতো কাজ করে তবে এটি সর্বদা একটি সতর্কতা জারি করে:

সতর্কতা: কমান্ড লাইন ইন্টারফেসে একটি পাসওয়ার্ড ব্যবহার করা নিরাপত্তাহীন হতে পারে।

যাইহোক, আমার উপরের বিবৃতিটি পরিবেশগত পরিবর্তনশীল ( $password) যা আমার পাসওয়ার্ড সংরক্ষণ করে ব্যবহার করে পরিচালনা করতে হবে , কারণ আমি টার্মিনাল থেকে বাশ স্ক্রিপ্টে পুনরুক্তি করে কমান্ডটি চালাতে চাই এবং আমি অবশ্যই একটি প্রম্পট দেখানোর অপেক্ষা রাখার ধারণাটি পছন্দ করি না definitely এবং আমাকে আমার পাসওয়ার্ডটি একটি স্ক্রিপ্টে 50 বা 100 বার ইনপুট করতে বাধ্য করে। সুতরাং এখানে আমার প্রশ্ন:

  • সতর্কতা দমন করা কি সম্ভব? কমান্ডটি আমি যেমন বলেছি ঠিক তেমন কাজ করে, তবে আমি লুপ শেষ করে 50 বা 100 বার কমান্ডটি চালানোর সময় উইন্ডোটি বেশ অগোছালো হয়ে যায়।

  • আমার কি সতর্কতা বার্তা মানা উচিত এবং আমার স্ক্রিপ্টে আমার পাসওয়ার্ডটি লেখা উচিত নয়? যদি এটি হয় তবে প্রম্পট আমাকে প্রতিবার তা করতে বাধ্য করলে কি আমার পাসওয়ার্ডটি টাইপ করতে হবে?

দৌড়ানো man mysqlসাহায্য করে না, কেবল বলে

--show-warnings
যদি কোনও বিবৃতি থাকে তবে প্রতিবেদনের পরে সতর্কতা দেখানোর কারণ দিন। এই বিকল্পটি ইন্টারেক্টিভ এবং ব্যাচ মোডে প্রযোজ্য।

এবং যদি আমি কিছু অনুপস্থিত না থাকি তবে কীভাবে কার্যকারিতা বন্ধ করতে হবে সে সম্পর্কে কিছুই উল্লেখ করেনি।

আমি ওএস এক্স 10.9.1 ম্যাভেরিক্সে রয়েছি এবং হোমব্রু থেকে মাইএসকিউএল 5.6 ব্যবহার করি।


14
প্রস্তাবিত উপায় একটি বিকল্প ফাইল (মত প্রস্তুত হত্তয়া আপনার পাসওয়ার্ড সংরক্ষণ করতে হয় [client] password=my_passwordমধ্যে ~/.my.cnf)। অবশ্যই এর কিছু সুরক্ষিত প্রভাব রয়েছে, তবে কমপক্ষে চালানো যে কারও পক্ষে এটি অ্যাক্সেসযোগ্য নয় psএবং ফাইল অনুমতি নিয়ে আপনার এটির নিয়ন্ত্রণ রয়েছে।
আন্তন কোভালেনকো

4
mysql -u root password root -e "statement" > /dev/null?

ওহ ওয়ে, আপনি পাইথনের মতো কিছু ব্যবহার করতে পারেন pexcept। এটি টার্মিনাল সন্নিবেশগুলি করতে পারে এবং কমান্ড দেয় এমন প্রতিক্রিয়াও পরিচালনা করতে পারে। আপনি কেবল আসল আউটপুটটির যে

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

2
প্রস্তাবিত পদ্ধতি whcih স্পষ্ট পাসওয়ার্ড সংরক্ষণ করে না জন্য, বিস্তারিত হয় dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html
এন্থনি

উত্তর:


249

আপনার মাইএসকিউএল ক্লায়েন্ট / সার্ভার সংস্করণ একটি 5.6.xa পথ সতর্কতামূলক বার্তা এড়াতে ব্যবহার করছেন হলে mysql_config_editor সরঞ্জাম:

mysql_config_editor set --login-path=local --host=localhost --user=username --password

তারপরে আপনি আপনার শেল স্ক্রিপ্টটিতে ব্যবহার করতে পারেন:

mysql --login-path=local  -e "statement"

পরিবর্তে:

mysql -u username -p pass -e "statement"

28
মনে রাখবেন যে --login-pathঅন্যান্য সমস্ত যুক্তির আগে আসতে হবে। আমি চেষ্টা করেছিলাম mysqldump --tables --login-path=localএবং ত্রুটি পেয়েছিলাম unknown variable 'login-path=local'
Tulio

Mysql কমান্ড লাইন ক্লায়েন্ট ডিফল্টরূপে 'ক্লায়েন্ট' লগইন পাথের অধীনে দেখতে পাবেন। আপনি একটি ছোট পরিবর্তন করে "mysql -e 'স্টেটমেন্ট" "র নির্দেশাবলী সরল করতে পারেন।
মরগান টকার

2
এটি সরাসরি কাজ করছে যদি আমরা সরাসরি শেল ফাইলটি
নাবিল আরশাদ

1
@ নাবিল আরশাদ আমি মনে করি যে এটি আপনার ক্রোন্টাবের জন্য ব্যবহারকারীর জন্য "হোম" সেট করা হয়নি (সাধারণভাবে ENV ভার্সেস) তাই ক্রোনট্যাবে ক্লায়েন্ট সঠিক ~ / .mylogin.cnf সন্ধান করতে পারবেন না
ক্রিশ্চিয়ান পোর্টা

1
@ নামজিভিউ, আমি নিশ্চিত নই, তবে আমি বিশ্বাস করি যে এই সমাধানটি এনক্রিপ্ট করা পাসওয়ার্ড সংরক্ষণ করে।
zhekaus

209

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

mysql --defaults-extra-file=/path/to/config.cnf

অথবা

mysqldump --defaults-extra-file=/path/to/config.cnf 

যেখানে config.cnf রয়েছে:

[client]
user = whatever
password = whatever
host = whatever

এটি আপনাকে একাধিক কনফিগার ফাইল রাখতে দেয় - বিভিন্ন সার্ভার / ভূমিকা / ডাটাবেসের জন্য। ~ / .My.cnf ব্যবহার করা আপনাকে কেবল কনফিগারেশনের একটি সেট রাখার অনুমতি দেবে (যদিও এটি ডিফল্টগুলির একটি কার্যকর সেট হতে পারে)।

আপনি যদি কোনও ডেবিয়ান ভিত্তিক ডিস্ট্রোতে থাকেন এবং মূল হিসাবে চালাচ্ছেন তবে আপনি উপরেরটি উপেক্ষা করতে এবং প্রবেশ করতে কেবল /etc/mysql/debian.cnf ব্যবহার করতে পারেন ...:

mysql --defaults-extra-file=/etc/mysql/debian.cnf


12
দ্রষ্টব্য: --defaults-extra-fileঅবশ্যই প্রথম বিকল্প হতে হবে অন্যথায় মাইএসকিএল অভিযোগ করে mysqldump: unknown variable 'defaults-extra-file
পেভিক

4
গৃহীত উত্তরের দুর্দান্ত বিকল্প। অবশ্যই MYSQL_PWDভেরিয়েবলটি সেট করবেন না ....
ডুডঅনআরক

1
5.6 এর নীচে সংস্করণগুলির জন্য অবশ্যই একটি ভাল বিকল্প। অন্যথায়, আমি গৃহীত উত্তরটি দিয়ে যাব।
dkniffin

21
একটি অস্থায়ী .cnf ফাইল তৈরীর একটি বিকল্প ব্যাশ মধ্যে এই কাজ করতে হয়: mysql --defaults-extra-file=<(printf "[client]\nuser = %s\npassword = %s" "$user" "$pwd") -e "statement"। যেহেতু printfবাশ দ্বারা সরাসরি মৃত্যুদন্ড কার্যকর করা হয় তা এটি প্রদর্শিত হয় না ps
ডেভ জেমস মিলার

3
এর --defaults-fileপরিবর্তে আমার ব্যবহার করা দরকার --defaults-extra-file, কারণ পরবর্তীকর্তারা। / .My.cnf- এ সেটিংসকে অগ্রাধিকার দিয়েছেন।
রজার ডিউক

185

একটি পদ্ধতি যা সুবিধাজনক (তবে সমানভাবে নিরাপত্তাহীন) তা হ'ল:

MYSQL_PWD=xxxxxxxx mysql -u root -e "statement"

নোট করুন যে সরকারী দস্তাবেজগুলি এর বিরুদ্ধে প্রস্তাব দেয় recommend
দেখুন পাসওয়ার্ড নিরাপত্তা জন্য 6.1.2.1 এন্ড-ইউজার নির্দেশিকা (মাইএসকিউএল সংস্করণ 5.6 জন্য ম্যানুয়াল) :

MYSQL_PWDপরিবেশ পরিবর্তনশীল আপনার পাসওয়ার্ড সংরক্ষণ

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


6
এটি আমার বাশ স্ক্রিপ্টে কাজ করে না:Access denied for user 'root'@'localhost' (using password: NO)
rubo77

24
একটি স্ক্রিপ্টে, আপনার প্রয়োজন export MYSQL_PWD=whatever
দাঙ্গা

2
যেহেতু আমার প্রশ্নটি খুব দ্রুত, আমি এই বিকল্পটি বেছে নিয়েছি। তারপরে আমি কোয়েরিটি সম্পাদন করার পরে এটিকে কিছু বগাসে সেট করেছি।
টিএমএইচ - কোডিড্যাক্ট

11
একটি স্ক্রিপ্টে আপনাকে চালানোর দরকার নেই export, কেবল এটি সমস্ত একটি লাইনে রাখুন:MYSQL_PWD=xxxxxxxx mysql -u root -e "statement"
জেডি

1
@ জেডি: মাইএসকিউএল 5.7.21 এর সাথে উবুন্টু 16.04 এ আমার জন্য কাজ করে।
mivk

70

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

mysqlcommand 2>&1 | grep -v "Warning: Using a password"

এটি মূলত স্ট্যান্ডার্ড ত্রুটিটিকে স্ট্যান্ডার্ড আউটপুটে পুনঃনির্দেশ করছে - এবং "সতর্কতা: একটি পাসওয়ার্ড ব্যবহার" এর সাথে মেলে এমন সমস্ত লাইন ফেলে দেওয়ার জন্য গ্রেপ ব্যবহার করে।

এইভাবে, আপনি ত্রুটি সহ অন্য কোনও আউটপুট দেখতে পাবেন। আমি এটি বিভিন্ন শেল স্ক্রিপ্ট ইত্যাদির জন্য ব্যবহার করি etc.


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

2
এই বার্তাটি নিঃশব্দ করার জন্য দুর্দান্ত এবং সহজ, মাইএসকিউএল সেটআপে কোনও কিছু স্পর্শ করার দরকার নেই।
আজাস্কেল

এসকিউএলডাম্পের সাথে আমি ইতিমধ্যে যেখানে এসকিউএলএর পুনর্নির্দেশ করেছি সেখানে কীভাবে এটি ব্যবহার করব?
ম্যাক্রোম্যান

1
এখানকার অন্যান্যগুলির তুলনায় এটি একটি সত্যই খারাপ সমাধান। এটি মাইএসকিউএলের পরবর্তী কোনও সংস্করণে পাঠ্য পরিবর্তনের সাথে ব্যর্থ হতে পারে, অন্য কোনও লোকালে কাজ নাও করতে পারে।
ইয়াকুটো

42

আরও সুরক্ষিতভাবে কাজ করার জন্য আমি কীভাবে আমার দৈনিক মাইএসকিल्डম্প ডেটাবেস ব্যাকআপের জন্য আমার বাশ স্ক্রিপ্টটি পেয়েছি তা এখানে। এটি ক্রিশ্চিয়ান পোর্টার দুর্দান্ত উত্তরের একটি সম্প্রসারণ।

  1. প্রথম ব্যবহারের mysql_config_editor (মাইএসকিউএল 5.6+ দিয়ে আসে) এনক্রিপ্ট পাসওয়ার্ড ফাইল সেট আপ করার জন্য। মনে করুন আপনার ব্যবহারকারীর নাম "db_user"। শেল প্রম্পট থেকে চলমান:

    mysql_config_editor set --login-path=local --host=localhost --user=db_user --password

    এটি পাসওয়ার্ডের জন্য অনুরোধ জানায়। আপনি এটি প্রবেশ করানোর পরে, ব্যবহারকারী / পাস আপনার এনক্রিপ্ট করা সংরক্ষণ করা হবে savedhome/system_username/.mylogin.cnf

    অবশ্যই, সার্ভারে আপনার ব্যবহারকারীর নামটিতে "system_username" পরিবর্তন করুন।

  2. এটি থেকে আপনার বাশ স্ক্রিপ্ট পরিবর্তন করুন:

    mysqldump -u db_user -pInsecurePassword my_database | gzip > db_backup.tar.gz

    এটি:

    mysqldump --login-path=local my_database | gzip > db_backup.tar.gz

আর প্রকাশিত পাসওয়ার্ড নেই।


10

সবচেয়ে সহজ উপায়

mysql -u root -pMYPASSWORD -e "show databases" 2>/dev/null

43
সমস্যা এটি আপনার স্ক্রিপ্টে বৈধ ত্রুটিগুলিও দমন করবে।
man910

4
এছাড়াও আপনি ত্রুটিগুলি লগ করতে একটি লগ ফাইল 2> /var/log/myscript.log তৈরি করতে পারেন।
স্কামসলে

1
2>/dev/null | grep -v "mysql: [Warning] Using a password on the command line interface can be insecure."প্রশ্নে কেবল সতর্কবার্তাটি দমন করার জন্য ব্যবহার করুন
হাফেনক্রিনিচ

10

লগইন পথ নির্দিষ্ট করার সময় আপনি পাসওয়ার্ডটি পাস করতে আপনার স্ক্রিপ্টে mysql_config_editor চালাতে পারেন

expect -c "
spawn mysql_config_editor set --login-path=$mySqlUser --host=localhost --user=$mySqlUser --password
expect -nocase \"Enter password:\" {send \"$mySqlPassword\r\"; interact}
"

এটি প্রত্যাশার সেশন শুরু করে যা প্রম্প্টের সাথে ইন্টারঅ্যাক্ট করতে স্ক্রিপ্টগুলিতে ব্যবহার করা যেতে পারে

এই পোস্টটি দেখুন


আসলেই কি '>' সেখানে উপস্থিত ছিল?
ডেভিড গুডউইন

হ্যাঁ '>' এর অর্থ সেখানে রয়েছে যাতে mysql_config_editor স্টডআউট থেকে ইনপুট নেয়। Stdout থেকে mysql_config_editor এ যা যা পাসওয়ার্ড হ'ল আপনি যদি এই ব্যবহারকারীর '>' ছাড়া থাকতে চান তবে যা ঘটেছিল তা হ'ল ইকো কমান্ডটি পার্স করা হবে এবং আপনি যা দেখতে পাবে তা সবই ইকো কমান্ডের পরে
phylanx

সুতরাং, আপনি পাইপ অপারেটর "|" ব্যবহার করবেন, তাই না? কমপক্ষে, * নিক্স এবং ডস-এ, ">" STDOUT ক্যাপচার করবে এবং এটি বর্তমান কার্যক্ষম ডিরেক্টরিতে "mysql_config_editor" নামে একটি ফাইল লিখবে।
জে দানসান্দ

হ্যাঁ, আপনি ঠিক বলেছেন, আমি আমার আসল উত্তরটি সম্পাদনা করেছি
ফাইলেঙ্কস

7

ঠিক আছে, অস্থায়ী ফাইল বা কিছু ছাড়াই সমাধান করুন:

mysql --defaults-extra-file=<(echo $'[client]\npassword='"$password") -u $user -e "statement"

এটি অন্যেরা যা বলেছে তার অনুরূপ, তবে এখানে আপনার কোনও আসল ফাইলের দরকার নেই, কমান্ডের এই অংশটি ফাইলটি জাল করে: <(echo ...) (লক্ষ্য করুন মাঝখানে কোনও স্থান নেই<(


পাসওয়ার্ড এন্ট্রি সহ .my.cnfআপনার যদি ইতিমধ্যে আপনার কাছে কোনও ফাইল থাকে তবে এটি কাজ করে না~/.
সান্তিয়াগো আরিজিটি

5
shell> mysql_config_editor set --login-path=local
     --host=localhost --user=localuser --password
Enter password: enter password "localpass" here
shell> mysql_config_editor set --login-path=remote
     --host=remote.example.com --user=remoteuser --password
Enter password: enter password "remotepass" here

Mysql_config_editor .mylogin.cnf ফাইলটিতে কী লিখেছেন তা দেখতে, মুদ্রণ কমান্ডটি ব্যবহার করুন:

shell> mysql_config_editor print --all
[local]
user = localuser
password = *****
host = localhost
[remote]
user = remoteuser
password = *****
host = remote.example.com

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

পূর্ববর্তী উদাহরণগুলি দেখায়, .mylogin.cnf ফাইলটিতে একাধিক লগইন পাথ থাকতে পারে। এইভাবে, মাইএসকিএল_কনফিগ_এডিটর বিভিন্ন মাইএসকিউএল সার্ভারের সাথে সংযোগের জন্য একাধিক "ব্যক্তিত্ব" সেটআপ করা সহজ করে। এর পরে যেকোন একটি নাম দ্বারা নির্বাচিত হতে পারে --login-path বিকল্পটি ব্যবহার করে আপনি যখন ক্লায়েন্ট প্রোগ্রাম শুরু করেন। উদাহরণস্বরূপ, স্থানীয় সার্ভারের সাথে সংযোগ স্থাপন করতে, এই আদেশটিটি ব্যবহার করুন:

shell> mysql --login-path=local

রিমোট সার্ভারের সাথে সংযোগ স্থাপন করতে, এই আদেশটি ব্যবহার করুন:

shell> mysql --login-path=remote

আমি যদি www-ডেটা ব্যবহারকারী হিসাবে কোনও মাইএসকিल्डম্প কমান্ডটি কার্যকর করতে চাই? www-ডেটার কোনও হোম ডিরেক্টরি নেই ... আমি কীভাবে www-ডেটা ব্যবহারকারীর জন্য mysql_config_editor সেটআপ করব?
lewis4u

5

Https://gist.github.com/nestoru/4f684f206c399894952d থেকে

# Let us consider the following typical mysql backup script:
mysqldump --routines --no-data -h $mysqlHost -P $mysqlPort -u $mysqlUser -p$mysqlPassword $database

# It succeeds but stderr will get:
# Warning: Using a password on the command line interface can be insecure.
# You can fix this with the below hack:
credentialsFile=/mysql-credentials.cnf
echo "[client]" > $credentialsFile
echo "user=$mysqlUser" >> $credentialsFile
echo "password=$mysqlPassword" >> $credentialsFile
echo "host=$mysqlHost" >> $credentialsFile
mysqldump --defaults-extra-file=$credentialsFile --routines --no-data $database

# This should not be IMO an error. It is just a 'considered best practice'
# Read more from http://thinkinginsoftware.blogspot.com/2015/10/solution-for-mysql-warning-using.html

3

অন্য বিকল্পটি মাইএসকিএল আহ্বান করতে sshpass ব্যবহার করা, যেমন:

sshpass -p topsecret mysql -u root -p username -e 'statement'

কাজ মনে হচ্ছে, কিন্তু আপনাকে কমান্ড লাইন থেকে 'ব্যবহারকারীর নাম' মুছে ফেলতে হবে, তাই না?
e2-e4

3

একটি সাধারণ workaroud স্ক্রিপ্ট। এই "মাইএসকিএল" এর নাম দিন এবং এটিকে "/ usr / bin" এর আগে রাখুন। অন্যান্য কমান্ডের জন্য স্পষ্টত রূপগুলি, বা যদি সতর্কতার পাঠ্যটি আলাদা হয়।

#!/bin/sh

(
(
(
(
(
    /usr/bin/mysql "$@"
) 1>&9 
) 2>&1
) | fgrep -v 'mysql: [Warning] Using a password on the command line interface can be insecure.'
) 1>&2 
) 9>&1

3
যদিও এই উত্তরটি কিছুটা বিশৃঙ্খলাযুক্ত, আমি কেবল এটি উত্সাহিত করেছি কারণ এটি এমন উত্তরগুলি দেখতে আমাকে এতটাই বিস্মিত করে যেগুলি স্পষ্টতই ভুল নয় বা কোনও মন্তব্য ছাড়াই কিছুটা অপ্রচলিত ডাউনভোট হয়ে গেছে! এতে অবাক হওয়ার কিছু নেই যে ডেভিড অন্য কোনও প্রশ্নের উত্তর দেননি! তিনি ঝাঁপিয়ে পড়ে একটি উপন্যাস সমাধান সমাধানে সহায়তা করার চেষ্টা করেছিলেন এবং কেন কোনও ব্যাখ্যা ছাড়াই তাকে গালি দেওয়া হয়েছে! FU বেনামে ডাউনভোটার যারা মন্তব্য ছাড়েন না!
জেরেমি ডেভিস

3
জেরেমি ডেভিসকে +1 সম্মত করুন। এটি সংশ্লেষযুক্ত, তবে অন্য কোনও বিকল্প না রেখে এগুলি গ্রহণযোগ্য হতে পারে। এটি অবশ্যই ভুল নয়, সতর্কতা বন্ধ করে দেওয়ার মতো নয় যা সর্বকালের বোকা ধারণা হতে হবে!
বেন ম্যাকিন্টায়ার

1
@ জেরেমি ডেভিস হ্যাঁ, এটি বিশৃঙ্খলাযুক্ত হয়েছিল, মূলত কারণ আমি কাজটি দেখাতে চেয়েছিলাম। এটি সম্ভবত কোনও প্রথম বন্ধনী ছাড়া করা যেতে পারে, তবে কম পরিষ্কার হতে পারে। এটি আমার প্রথম স্ট্যাক এক্সচেঞ্জের প্রথম অ-পাঠ্য ক্রিয়াকলাপ ছিল ... যার পরে আমি এটি দীর্ঘকাল স্পর্শ করি নি। আপনার মন্তব্য অবশ্যই প্রশংসিত হয়েছিল।
ডেভিড জি।

@DavidG। - খুশী আমার মন্তব্য আপনার কাছে মূল্যবান ছিল। আপনি ফিরে এসেছেন এবং আপনার উত্তরটি এখন ইতিবাচক অঞ্চলে রয়েছে তা দেখেও দুর্দান্ত। ব্যক্তিগতভাবে, আমি মনে করি না যে কোনও মন্তব্য না করেই ভোটদানের অনুমতি দেওয়া উচিত ... কেউ যখন যেতে যাওয়ার জন্য নিন্দা জানায় তখন কীভাবে শিখতে হবে ?!
জেরেমি ডেভিস

এই বলে, আপনার উত্তরটি আবার দেখুন, আমি নিশ্চিত নই যে কোনও অস্থায়ী সমস্যার স্থায়ী সমাধান (মূলত মাইএসকিএল মোড়ানো) (একক স্ক্রিপ্টে ব্যবহারের জন্য ত্রুটি বার্তাকে দমন করা) যাওয়ার সবচেয়ে ভাল উপায়। স্ক্রিপ্টের মধ্যে কোনও ফাংশনে আইএমও মোড়ক দেওয়া (আপনার পদ্ধতিটি এখানে ব্যবহার করা ভাল হবে) একটি উচ্চতর পদ্ধতি superior আমার 2 সি ... :)
জেরেমি ডেভিস

3

এখানে স্ক্রিপ্ট / বিন / এসএ-তে ডকারের জন্য একটি সমাধান রয়েছে:

ডকার এক্সিকিউট [এমওয়াইএসকিউএল_সিএন্টএইনলআল্লু] শি-সি 'এক্সিকিউটিভ ইকো "[ক্লায়েন্ট]"> /root/mysql-credentials.cnf'

ডকার এক্সিকিউটিভ [এমওয়াইএসকিউএল_সিএন্টএইনলআল্লু] শি-সি 'এক্সিকিউটিভ ইকো "ইউজার = রুট" >> /root/mysql-credentials.cnf'

ডকার এক্সিকিউটিভ [এমওয়াইএসকিউএল_সিএন্টএইনলআল্লু] শি-সি 'এক্সিকিউটিভ ইকো "পাসওয়ার্ড = $ এমওয়াইএসকিউএল_আরওT_পাশওয়ার্ড" >> /root/mysql-credentials.cnf'

ডকার এক্সিকিউট [এমওয়াইএসকিউএল_সিএন্টএইনআলওএল] sh -c 'এক্সিকিউটিটি মাইএসকিলডম্প - ডিফল্টস-এক্সট্রা-ফাইল = / রুট / মাইএসকিএল-শংসাপত্র। সিএনএফ - সমস্ত ডাটাবেস'

[MYSQL_CONTAINER_NAME] প্রতিস্থাপন করুন এবং নিশ্চিত করুন যে পরিবেশের পরিবর্তনশীল MYSQL_ROOT_PASSWORD আপনার ধারকটিতে সেট করা আছে।

আশা করি এটি আপনাকে সহায়তা করবে যেমন এটি আমাকে সহায়তা করতে পারে!


খারাপ না. আমি একটি রিটার্ন দিয়ে সবেমাত্র একটি কল docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "[client] [RETURN HERE] password=pa55" > /root/defaults'ব্যবহার করেছি , উদাহরণস্বরূপ --defaults-fileএটি ইতিমধ্যে রুটকেও তুলে ধরে।
ম্যাথু উইলকক্সসন 4:58

3

আপনি কেবল স্ট্যান্ডার্ড ত্রুটি STDERR আউটপুটটিকে / dev / নাল এ পুনর্নির্দেশ করতে পারেন

সুতরাং ঠিক করুন:

mysql -u $user -p$password -e "statement" 2> /dev/null


7
আমি এই পদ্ধতিটিকে এড়িয়ে যাব কারণ এটি বৈধ ত্রুটিগুলি ধরা শক্ত করে
তুলবে

1

ব্যক্তিগতভাবে, আমি ত্রুটিটি ধরার জন্য স্ক্রিপ্ট র‍্যাপার ব্যবহার করি। কোড নমুনা এখানে:

#!/bin/bash

#echo $@ | cat >> /home/mysqldump.log 2>/dev/null
ERR_FILE=/tmp/tmp_mdump.err

# Execute dumper
/usr/bin/mysqldump $@ 2>$ERR_FILE

# Determine error and remove tmp file
ERROR=`cat $ERR_FILE`
rm $ERR_FILE

# Handle an error
if [ "" != "$ERROR" ]; then

        # Error occured
        if [ "Warning: Using a password on the command line interface can be insecure." != "$ERROR" ]; then
                echo $ERROR >&2
                exit 1
        fi
fi

1

পাওয়ারশেলের জন্য ( pwshনা, bash) এটি ছিল বেশ রুবেল-গোল্ডবার্গ সলিউশন ... আমার প্রথম চেষ্টাটি ছিল একটি ফাংশনে কলগুলি গুটিয়ে mysqlরাখা try/catch, তবে পাওয়ারশেলের ত্রুটি পরিচালনার ক্ষেত্রে কিছু অদ্ভুত আচরণের কারণে এটি কার্যকর ছিল না।

সমাধানটি ছিল $ErrorActionPreferenceকেবলমাত্র দীর্ঘ সংশ্লেষ এবং ক্যাপচার STDERRএবং STDOUTশব্দের বিশ্লেষণ ERRORএবং প্রয়োজনমতো পুনরায় নিক্ষেপ করার জন্য যথেষ্ট দীর্ঘ ওভাররাইড । আমরা ধরা এবং ছেড়ে দিতে না পারার "^mysql.*Warning.*password"কারণ হ'ল পাওয়ারশেল হ'ল পরিচালনা করে এবং ত্রুটিটিকে একটি স্ট্রিম হিসাবে উত্থাপন করে, তাই আপনাকে ফিল্টার করতে এবং পুনরায় নিক্ষেপ করতে অবশ্যই এগুলি সমস্ত ক্যাপচার করতে হবে । : /

Function CallMySQL() {
    # Cache the error action preference
    $_temp = $ErrorActionPreference
    $ErrorActionPreference = "Continue"

    # Capture all output from mysql
    $output = (&mysql --user=foo --password=bar 2>&1)

    # Restore the error action preference
    $ErrorActionPreference = $_temp

    if ($output -match "ERROR") {
        throw $output
    } elseif($output) {
        "   Swallowing $output"
    } else {
        "   No output"
    }
}

দ্রষ্টব্য: পাওয়ারশেল ইউনিক্সের জন্য উপলব্ধ, সুতরাং এই সমাধানটি ক্রস-প্ল্যাটফর্ম। এটি bashকিছু ছোটখাটো সিনট্যাক্স পরিবর্তনের সাথে মানিয়ে নেওয়া যেতে পারে ।

সতর্কতা: এমন কয়েক ডজন এজ-কেস রয়েছে যেখানে এটি অ-ইংরাজির ত্রুটি বার্তা বা স্টেটমেন্টগুলির মতো কাজ করে না যা শব্দটিকে ERRORআউটপুটে যে কোনও জায়গায় ফিরিয়ে দেয় , তবে mysqlএটি বোমা না মেরে একটি মৌলিক আহ্বানের জন্য সতর্কতাটি গ্রাস করতে যথেষ্ট ছিল পুরো লিপি। আশা করি অন্যরাও এটিকে দরকারী বলে মনে করছেন।

mysqlএই সতর্কতাটি দমন করার জন্য যদি সহজভাবে কোনও বিকল্প যুক্ত করা হয় তবে এটি দুর্দান্ত হবে ।


1

আপনি যদি আপনার কাজগুলির সময় নির্ধারণের জন্য, বা অন্য কোনও প্ল্যাটফর্ম যেখানে আপনি কোনও mylogin.cnfফাইলের জন্য জিজ্ঞাসা করছেন তা ব্যবহার করার জন্য যদি ঘটে থাকে তবে এসকিউএল কলগুলি চালিয়ে যাওয়ার আগে আমি নিম্নলিখিত শেল কোডটি সফলভাবে ফাইলটির জন্য একটি নতুন অবস্থান সরবরাহ করতে ব্যবহার করেছি:

if test -f "$CUSTOM_MY_LOGINS_FILE_PATH"; then
   chmod 600 $CUSTOM_MY_LOGINS_FILE_PATH
   export MYSQL_TEST_LOGIN_FILE="$CUSTOM_MY_LOGINS_FILE_PATH"
fi

...

result=$(mysql --login-path=production -NBA -D $schema -e "$query")

MYSQL_TEST_LOGIN_FILEএনভায়রনমেন্ট ভেরিয়েবল যেখানে ডিফল্টর চেয়ে আলাদা ফাইল পাথে সেট করা যেতে পারে।

এটি বিশেষত কার্যকর যদি আপনি একটি জালযুক্ত প্রক্রিয়াতে চলতে থাকেন এবং $HOMEডিরেক্টরিতে ফাইলগুলি স্থানান্তর বা অনুলিপি করতে না পারেন ।

এখানে ডকুমেন্টেশন দেখুন।


0

সর্বোত্তম সমাধানটি হ'ল ওরফে ব্যবহার করা:

alias [yourapp]-mysql="mysql -u root -psomepassword -P3306 -h 127.0.0.1"

উদাহরণস্বরূপ, এটি আপনার স্ক্রিপ্টে রাখুন:

alias drupal-mysql="mysql -u root -psomepassword -P3306 -h 127.0.0.1"

তারপরে আপনার স্ক্রিপ্টে একটি ডাটাবেস লোড করতে:

drupal-mysql database_name < database_dump.sql

একটি বিবৃতি চালাতে:

drupal-mysql -e "EXEC SOMESTATEMENT;"

তারপরে আলিয়াসগুলি আনালিয়াস করুন:
নীল ডেভিস

এফওয়াইআই আপনি স্ক্রিপ্টের অভ্যন্তরে কোনও ফাংশনের ভিতরে মাইএসকিএল কল দিচ্ছেন তবে আপনি নাম ব্যবহার করতে পারবেন না।
ব্যবহারকারী3616725

0

সহায়ককে সংজ্ঞায়িত করুন:

remove-warning () {
    grep -v 'mysql: [Warning] Using a password on the command line interface can be insecure.'
}

এটা ব্যবহার করো:

mysql -u $user -p$password -e "statement" 2>&1 | remove-warning

Tachaan! আপনার কোডটি পরিষ্কার এবং পড়তে সুন্দর

(বাশ দিয়ে পরীক্ষিত)


-1

আরেকটি সমাধান (উদাহরণস্বরূপ স্ক্রিপ্ট থেকে):

 sed -i'' -e "s/password=.*\$/password=$pass/g" ~/.my.cnf
 mysql -h $host -u $user $db_name -e "$sql_cmd"

-i''বিকল্প এখানে ম্যাক OS X স্ট্যান্ডার্ড ইউনিক্স অপারেটিং সিস্টেমের সাথে সামঞ্জস্যের সোজা ব্যবহার করতে পারেন জন্য-i


1
পাসওয়ার্ডটি এখনও 'সেড' এর কমান্ড লাইনে রয়েছে তাই প্রক্রিয়া তালিকাতে দৃশ্যমান থেকে যায়, এমনকি যদি সংক্ষেপেও হয়।
এন্থনি

-1

ব্যাশ স্ক্রিপ্টে শর্তসাপেক্ষে আউটপুটটি আমি ব্যবহার করছিলাম।

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

এটি কেবল সর্বশেষ লাইনে ফিরে আসে

mysql -u db_user -pInsecurePassword my_database ... | sed -e '$!d'

এটি ত্রুটিটি দমন করবে না, তবে এটি নিশ্চিত করবে যে আপনি কোনও বাশ স্ক্রিপ্টে কোয়েরির আউটপুট ব্যবহার করতে পারবেন।


-1

সহজতম পথ:

mysql -u root -p YOUR_DATABASE

এটি প্রবেশ করান এবং আপনাকে আপনার পাসওয়ার্ডটি টাইপ করতে হবে।

দ্রষ্টব্য: হ্যাঁ, সেমিকোলন ছাড়াই।


-3

আপনি মাইএসকিউএল সম্পাদন করতে পারেন এবং উদাহরণস্বরূপ / dev / নাল ব্যবহার করে সতর্কতা এবং ত্রুটি বার্তাকে দমন করতে পারেন:

# if you run just a SQL-command
mysql -u ${USERNAME} -p${PASSWORD} -h ${HOST} ${DATABASE} -e "${STATEMENT}" &> /dev/null

# Or you can run SQL-script as a file
mysql -u ${USERNAME} -p${PASSWORD} -h ${HOST} ${DATABASE} < ${FILEPATH} &> /dev/null

কোথায়:

${USERNAME} - existing mysql user

${PASSWORD} - password

${HOST}     - ip or hostname, for example 'localhost'

${DATABASE} - name of database

${STATEMENT}- SQL command

${FILEPATH} - Path to the SQL-script

উপভোগ করেন!


1
কেবল সচেতন থাকুন যে এটি সমস্ত ত্রুটি বার্তাকে দমন করবে, কেবলমাত্র সেই পাসওয়ার্ডের সতর্কতা নয়।
সাইমন পূর্ব

-3

এটি আমার পক্ষে কাজ করেছে - কেবলমাত্র এর 2> nullপরে যুক্ত হয়েছে $(mysql_command)এবং এটি কেবল ত্রুটি এবং সতর্কতা বার্তাগুলিকে দমন করবে।


1
এর অর্থ হ'ল অন্য কিছু ভুল হলে আপনি কোনও প্রতিবেদন পান না!
এন্থনি

এছাড়াও, আপনি সম্ভবত চেয়েছিলেন 2>/dev/null। ব্যবহারের 2> nullফলে কেবলমাত্র বর্তমান ডিরেক্টরিতে "নাল" নামক একটি ফাইলে আউটপুট দেওয়া হবে।
thelogix
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.