Próbuję ustawić zadanie CRON do pobierania kopii zapasowej z mojej maszyny slave. Więc muszę zatrzymać niewolnika
Wydałem polecenie
mysqladmin --user=root --password=test_pass stop-slave
Ale rzuca błąd:
mysqladmin: połączenie z serwerem na „localhost” nie powiodło się błąd: „Odmowa dostępu dla użytkownika„ root ”@„ localhost ”(przy użyciu hasła: TAK)”
Teraz próbowałem z poleceniem
mysqladmin --user=root --password stop-slave
Prosi o podanie hasła, a ja podałem jako test_pass
i wszystko było w porządku.
Dlaczego tak się stało? Jaka jest alternatywa?
Uwaga: BTW moja wersja mysql jest mysql-5.0.95-5
, to ma sens.
mysql
authentication
mysqladmin
Praveen Prasannan
źródło
źródło
'
pojedynczych cudzysłowach powinno zapobiec temu problemowi. gnu.org/software/bash/manual/bashref.html#QuotingOdpowiedzi:
Argumenty wiersza poleceń podlegają interpretacji przez systemową powłokę poleceń, zmieniając zachowanie polecenia lub zmieniając wartość argumentów przed przekazaniem ich do wywoływanego programu.
Gdy argument (taki jak wartość dla
--password
) zawiera znak, który powłoka może interpretować, należy go albo zacytować (zwykle ująć w pojedyncze cudzysłowy w systemie'
Unix lub podwójny cudzysłów"
w systemie Windows), albo uciec indywidualnie (zwykle odwrotnym ukośnikiem\
przed każdym metaznakiem ), aby uniknąć interpretacji przez powłokę.Podczas gdy określone znaki są specyficzne dla systemu, niektóre znaki, na które należy uważać, obejmują:
Jeśli hasło, na naprawdę zły przykład, zostało ustawione na
pa$$word
...Dalsza lektura:
Aktualizacja: aby uciec
'
pojedynczemu lub"
podwójnemu cudzysłowowi w haśle, możesz uciec przed nimi ukośnikiem odwrotnym lub umieścić cały argument w odwrotnym stylu cudzysłowów, jeśli nie ma innych znaków, których wybrany styl cytowania nie jest zgodny z.Jeśli masz pojedynczy cytat, a także inne znaki specjalne, utkniesz z ukośnikiem odwrotnym, ponieważ w systemie uniksowym podwójny cytat jest „słabszy” niż pojedynczy cytat, a wiele metaznaków jest nadal rozwiniętych, gdy jest ujętych w podwójny cudzysłów, ale nie w pojedyncze cytaty.
Nie jest to specyficzne dla MySQL, ale dotyczy wszystkiego z argumentami wiersza poleceń.
Zazwyczaj możesz użyć tego
echo
polecenia, aby zobaczyć, jak powłoka interpretuje twoje argumenty.Dalsze działania: Powłoka bash (i przypuszczalnie niektóre inne) pozwala na unikanie pojedynczych cudzysłowów w ciągach pojedynczych cudzysłowów, chociaż konwencja jest dziwna (prawdopodobnie oparta na dawno zapomnianej decyzji zagubionej w mgiełce czasu):
Zastąp każdy
'
z nich'\''
przed owijaniem całego łańcucha pojedynczymi cudzysłowami ... więc literałfoo'bar
jest wyrażony jako'foo'\''bar'
.Jak powiedziałem, dziwne. Jest to konieczne, ponieważ ukośnik odwrotny unika pojedynczego cudzysłowu poza ciągiem pojedynczego cudzysłowu, odwrotny ukośnik nic nie unika w bash ciągu pojedynczego cudzysłowu, a ciągi pojedynczego cudzysłowu można zamykać i ponownie otwierać za pomocą wielu pojedynczych cudzysłowów, o ile nie ma nieokreślonego interweniujące postacie o specjalnym znaczeniu. Tak więc
'\''
zamyka cytowanie łańcucha, a następnie podaje znak ucieczki, a następnie ponownie otwiera cytowanie łańcucha.źródło
pa$$word
Dodanie:
Na maszynie z systemem Windows również zmagaliśmy się z hasłem: zawierało ono hasło,
%
które należy uciec%%
((same cytaty tutaj nie wystarczą)źródło