mysqladmin इनलाइन पासवर्ड नहीं ले रहा है


10

मैं अपनी गुलाम मशीन से बैकअप लेने के लिए एक क्रॉन जॉब सेट करने की कोशिश कर रहा हूं। इसलिए मुझे गुलाम को रोकने की जरूरत है

मैंने एक आदेश जारी किया

mysqladmin --user=root --password=test_pass stop-slave

लेकिन यह त्रुटि फेंक रहा है:

mysqladmin: 'localhost' में सर्वर से कनेक्ट होने में त्रुटि: 'उपयोगकर्ता' रूट '@' लोकलहोस्ट '(पासवर्ड का उपयोग कर: YES) के लिए प्रवेश निषेध'

अब मैंने आज्ञा लेकर कोशिश की

mysqladmin --user=root --password stop-slave

यह पासवर्ड के लिए संकेत देता है और मैंने जैसा दिया test_passथा और सब कुछ ठीक था।

ऐसा क्यों हुआ? विकल्प क्या है?

NB: BTW मेरा mysql संस्करण है mysql-5.0.95-5, यह किसी भी मतलब है।


क्या आपके पासवर्ड में कोई विशेष अक्षर हैं जो शेल की व्याख्या कर रहे हैं? क्या आपने 'उद्धरण' या "उद्धरण" में पासवर्ड संलग्न करने की कोशिश की है?
माइकल - sqlbot

कौन से विशेष पात्र हैं जो खोल की व्याख्या कर सकते हैं? क्या कोई दस्तावेज है?
प्रवीण प्रसन्न

1
$ & जैसे अक्षर! \ [] <> सभी संभावित समस्याग्रस्त के रूप में ध्यान में आते हैं। 'एकल उद्धरणों में पासवर्ड संलग्न करना उस समस्या को रोकना चाहिए। gnu.org/software/bash/manual/bashref.html#Quoting
माइकल - sqlbot

2
महान .. काम करना। मैं इसे उत्तर के रूप में चिह्नित करना चाहूंगा। क्या आप इसे उत्तर के रूप में रख सकते हैं
प्रवीण प्रसन्नन

@ माइकल- sqlbot हाँ आपको पोस्ट करना चाहिए उत्तर के रूप में है
RolandoMySQLDBA

जवाबों:


21

कमांड लाइन के तर्क सिस्टम के कमांड शेल द्वारा व्याख्या के अधीन हैं, कमांड के व्यवहार को बदलने या तर्कों के मूल्य को बदलने से पहले उन्हें बुलाया कार्यक्रम में पारित किया जाता है।

जब एक तर्क (जैसे मान के लिए --password) में एक वर्ण होता है जो शेल की व्याख्या कर सकता है, तो उन्हें या तो उद्धृत करने की आवश्यकता होती है (आमतौर पर विंडोज में एकल उद्धरण 'या दोहरे उद्धरण में संलग्न ") या व्यक्तिगत रूप से बच गए (आमतौर पर किसी मेटाकाचर \से पहले बैकस्लैश के साथ) ) खोल द्वारा व्याख्या से बचने के लिए।

हालांकि विशिष्ट वर्ण सिस्टम-विशिष्ट हैं, कुछ वर्णों को शामिल करने के लिए बाहर देखने के लिए:

$ & ! \ [ ] < > `

यदि पासवर्ड, वास्तव में खराब उदाहरण के लिए, पर सेट किया गया था pa$$word...

mysql --password=pa$$word     # does not work
mysql --password='pa$$word'   # works
mysql --password=pa\$\$word   # works, but slightly unclear what's going on at first glance

आगे की पढाई:


अद्यतन: पासवर्ड में 'एकल या "दोहरे उद्धरण चिह्नों से बचने के लिए , आप या तो उन्हें एक प्रमुख बैकस्लैश से बच सकते हैं, या उद्धरण के विपरीत शैली में पूरे तर्क को संलग्न कर सकते हैं यदि कोई अन्य वर्ण नहीं हैं जो उद्धृत करने की चुनी हुई शैली संगत नहीं है। साथ में।

mysql --password="like'this" # password has a single quote in the middle
mysql --password='like"this' # password with a double quote in the middle

यदि आपके पास एक ही उद्धरण और अन्य विशेष वर्ण हैं, तो आप बैकस्लैश से बचकर भाग रहे हैं क्योंकि, यूनिक्स में, दोहरे उद्धरण एक उद्धरण से "कमजोर" हैं और कई मेटाचैटर अभी भी विस्तारित हैं जब दोहरे उद्धरणों में संलग्न हैं, लेकिन एकल नहीं उद्धरण।

यह MySQL-specific नहीं है, लेकिन कमांड लाइन तर्कों के साथ किसी भी चीज़ पर लागू होता है।

आप आमतौर पर echoकमांड का उपयोग यह देखने के लिए कर सकते हैं कि शेल आपके तर्कों की व्याख्या कैसे कर रहा है।

$ echo foo$bar 
foo                # literal 'foo' plus the (empty) shell variable $bar

$ echo foo\$bar
foo$bar            # backslash prevents expansion of $bar as a variable

$ echo "foo$$bar"  # weaker double quote doesn't prevent expansion so
foo9691bar         # the $$ expands to the unix process id (pid) of the current shell

$ echo 'foo$$bar'
foo$$bar           # "stronger" single quote prevents shell expansion

$ echo "foo'bar"
foo'bar            # double quote allows single quote within the literal

फॉलो-अप: बैश शेल (और संभवतः कुछ अन्य) एकल-उद्धृत स्ट्रिंग्स के भीतर एकल उद्धरण से बचने की अनुमति देता है, हालांकि सम्मेलन विचित्र है (शायद कुछ लंबे समय से भूल गए निर्णय पर आधारित है जो अब समय के क्षणों में खो गए हैं)

पूरे स्ट्रिंग को सिंगल कोट्स में लपेटने से पहले 'स्ट्रिंग के अंदर प्रत्येक को बदलें '\''... इसलिए शाब्दिक स्ट्रिंग foo'barको व्यक्त किया जाता है 'foo'\''bar'

जैसा मैंने कहा, विचित्र। इसकी आवश्यकता इसलिए है क्योंकि एक बैकस्लैश एक एकल उद्धरण स्ट्रिंग के बाहर एक एकल उद्धरण से बच जाता है, एक बैकस्लैश बैश में एकल-उद्धृत स्ट्रिंग के अंदर कुछ भी नहीं बचता है , और एकल उद्धृत स्ट्रिंग्स को बंद किया जा सकता है और कई उद्धरणों द्वारा फिर से खोला जा सकता है जब तक कि कोई भी अनपेक्षित न हों। ऐसे पात्रों का हस्तक्षेप करना जिनके विशेष अर्थ हैं। तो '\''स्ट्रिंग के उद्धरण को बंद कर देता है, फिर बच गए शाब्दिक की आपूर्ति करता है, फिर स्ट्रिंग के उद्धरण को फिर से खोल देता है।


1
थोड़ा और स्पष्टीकरण चाहिए। यदि पासवर्ड क्षेत्र में सिंगल कोट्स (') आ रहा है तो क्या होगा? स्लैश के साथ इसे बचाना () एकमात्र तरीका है?
प्रवीण प्रसन्न

क्या सह-घटना है कि मेरे लाइव सर्वर का पासवर्ड सेट हैpa$$word
उमैर

0

इसके अलावा:

एक विंडोज मशीन पर, हमने एक पासवर्ड के साथ संघर्ष किया: इसमें निहित है, %जिसे भागने की आवश्यकता है %%(अकेले उद्धरण यहाँ पर्याप्त हैं)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.