mysqladmin satır içi şifre almıyor


10

Köle makinemden yedek almak için bir cron işi ayarlamaya çalışıyorum. Yani köleyi durdurmam lazım

Bir komut verdim

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

Ama hata veriyor:

mysqladmin: 'localhost' adresinden sunucuya bağlanma başarısız hata: 'Kullanıcı' root '@' localhost 'için erişim reddedildi (şifre kullanarak: YES)'

Şimdi komutla denedim

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

Şifre ister ve ben verdi test_passve her şey iyiydi.

Neden böyle oldu? Alternatif nedir?

Not: BTW benim mysql sürümü, mysql-5.0.95-5herhangi bir anlam ifade ediyor.


Parolanızda kabuğun yorumlayabileceği özel karakterler var mı? Parolayı "tırnak işaretleri" veya "tırnak işaretleri" içine koymayı denediniz mi?
Michael - sqlbot

Shell'in yorumlayabileceği özel karakterler hangileridir? herhangi bir belge var mı?
Praveen Prasannan

1
$ &! Gibi karakterler \ [] <> hepsi potansiyel olarak sorunlu olarak akla gelir. Parolanın 'tek tırnak içine alınması bu sorunu önlemelidir. Gnu.org/software/bash/manual/bashref.html#Quoting
Michael - sqlbot

2
harika .. çalışıyor. Bunu cevap olarak işaretlemek istiyorum. Cevap verebilir misiniz lütfen
Praveen Prasannan

@ Sen gönderilmesi gerekiyor Michael-sqlbot evet cevabı gibidir
RolandoMySQLDBA

Yanıtlar:


21

Komut satırı bağımsız değişkenleri, sistemin komut kabuğu tarafından yorumlanır, komutun davranışını değiştirir veya bağımsız değişkenlerin çağrılan programa aktarılmadan önce değerini değiştirir.

Bir bağımsız değişken (değeri gibi --password) kabuğun yorumlayabileceği bir karakter içerdiğinde, bunların tırnak içine alınması (genellikle unix'te tek tırnak içine alınması 'veya "Windows'ta çift tırnak içine alınması ) veya ayrı ayrı (genellikle \her meta karakterden önce ters eğik çizgi ile) verilmesi gerekir. ) kabuk tarafından yorumlanmasını önlemek için.

Belirli karakterler sisteme özgü olsa da, dikkat edilmesi gereken bazı karakterler şunlardır:

$ & ! \ [ ] < > `

Parola, gerçekten kötü bir örnek için 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

Daha fazla okuma:


Güncelleme: şifredeki 'tek veya "çift ​​tırnaklardan kaçmak için, önde gelen bir ters eğik çizgiyle kaçabilir veya seçilen alıntı stilinin uyumlu olmadığı başka bir karakter yoksa, argümanın tamamını ters tırnak içine alabilirsiniz. ile.

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

Tek bir alıntı ve diğer özel karakterleriniz varsa, ters eğik çizgiden kaçarsınız, çünkü unix'te çift tırnak tek bir alıntıdan "daha zayıftır" ve çift tırnak içine alındığında birçok meta karakter hala genişler, ancak tek tırnak içine alınmaz tırnak.

Bu MySQL'e özgü değildir, ancak komut satırı bağımsız değişkenleri olan her şey için geçerlidir.

echoKabuğun bağımsız değişkenlerinizi nasıl yorumladığını görmek için genellikle komutu kullanabilirsiniz .

$ 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

Takip: Bash kabuğu (ve muhtemelen bazı diğerleri), konvansiyon tuhaf olsa da (muhtemelen zamanın sislerinde kaybedilen uzun zamandır unutulmuş bir karara dayanarak) tek tırnaklı dizelerde tek tırnaklardan kaçmaya izin verir:

Dizenin tamamını tek tırnak 'içine '\''almadan önce dizenin her birini yerine koyun ... Böylece değişmez dize foo'barolarak ifade edilir 'foo'\''bar'.

Dediğim gibi tuhaf. Bu gereklidir, çünkü bir ters eğik çizgi tek tırnaklı bir dizenin dışında tek bir tırnaktan kaçar, ters eğik çizgi bash içindeki tek tırnaklı bir dizenin içinde hiçbir şeyden kaçmaz ve tek tırnaklı dizeler kaçınılmaz olmadığı sürece birden fazla tek tırnakla kapatılıp yeniden açılabilir özel anlamı olan araya giren karakterler. Böylece '\'', dizenin alıntısını kapatır, sonra kaçan değişmez değeri sağlar, sonra dizenin alıntısını yeniden açar.


1
Biraz daha açıklığa ihtiyacım var. Şifre alanına tek tırnak işareti (') geliyorsa ne olur? Slash () ile kaçmanın tek yolu nedir?
Praveen Prasannan

Canlı sunucumun şifresinin ayarlanmış olması ne büyük olaypa$$word
Umair

0

İlave:

Bir Windows Machine'de de bir şifre ile mücadele ettik: %içeriden kaçması gereken içeriği içeriyordu %%(Burada sadece alıntılar yeterli değildir)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.