mysqladmin не принимает встроенный пароль

Я пытаюсь установить задание cron для резервного копирования с моей подчиненной машины. Поэтому мне нужно остановить подчиненного

Я выпустил команду

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

Но это ошибка:

  

mysqladmin: подключиться к серверу с ошибкой «localhost»: «Доступ   запрещен для пользователя 'root' @ 'localhost' (с использованием пароля: YES) '

Теперь я попытался с помощью команды

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

Он запрашивает пароль, и я дал как test_pass, и все было в порядке.

Почему так случилось? Какая альтернатива?

NB: BTW моя версия mysql mysql-5.0.95-5, это имеет смысл.

10 голосов | спросил Praveen Prasannan 27 AM00000080000003131 2013, 08:50:31

1 ответ


20

Аргументы командной строки могут интерпретироваться в командной оболочке системы, изменяя поведение команды или изменяя значение аргументов до их передачи в вызываемую программу.

Когда аргумент (например, значение для --password) содержит символ, который оболочка может интерпретировать, они должны быть либо кавычками (обычно заключен в одинарные кавычки ' в unix или double quote " в Windows) или экранировано индивидуально (обычно с обратной косой чертой \ перед каждым метасимволом), чтобы избежать интерпретации оболочки.

В то время как конкретные символы являются системными, некоторые символы, на которые следует обратить внимание, включают:

$ & ! \ [ ] < > `

Если пароль для действительно плохого примера был установлен в 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

Дальнейшее чтение:


Обновление: чтобы избежать либо ' single или " с двойным кавычком в пароле, вы можете либо избежать их с помощью обратного слэша, либо заключить весь аргумент в противоположном стиле кавычек, если нет других символов, которые не соответствуют выбранному типу цитирования.

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

Если у вас есть одна кавычка и другие специальные символы, вы застряли в обратном сбрасывании, потому что в unix двойная кавычка «слабее», чем одна цитата, и многие метасимволы все еще расширяются, когда заключены в двойные кавычки но не одинарные кавычки.

Это не зависит от MySQL, но применяется ко всем аргументам командной строки.

Обычно вы можете использовать команду 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

Последующие действия: оболочка bash (и, предположительно, некоторые другие) позволяет избежать одиночных кавычек в строках с одной кавычкой, хотя соглашение является странным (вероятно, основано на некотором давно забытом решении, потерянном сейчас туманности времени):

Замените каждый ' внутри строки с помощью '\'' перед тем, как обернуть всю строку в одинарные кавычки ... так что буквальная строка foo'bar выражается как 'foo'\''bar'

Как я уже сказал, странно. Это необходимо, потому что обратная косая черта избегает одиночной кавычки за пределами одной строки с кавычками, обратная косая черта пропускает ничего внутри одной кавычки в bash, а одинарные кавычки могут быть закрыты и повторно открыты несколькими одинарными кавычками до тех пор, пока не будут выделены незанятые промежуточные символы, имеющие особое значение. Поэтому '\'' закрывает цитирование строки, затем передает экранированный литерал, а затем снова открывает цитату строки.

ответил Michael - sqlbot 27 PM00000060000005131 2013, 18:05:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132