Действительно ли mysqldump --password делает то, что говорит?

Я пытаюсь использовать mysqldump сбросить схему, и это в основном работает, но я столкнулся с одним любопытством: -p или же --password вариант, кажется, что он делает что-то другое, чем установка пароля (как man страница и --help выходной скажи, что должен).

В частности, похоже, что он делает то, что указано здесь: http://snippets.dzone.com/posts/show/360 - то есть настраивает базу данных на дамп.

Чтобы поддержать мое несколько странное утверждение, я могу сказать вам, что если я не укажу --password (или же -p), команда печатает оператор использования и завершает работу с ошибкой. Если я его укажу, мне сразу же будет предложено ввести пароль (!), А затем базу данных, указанную в --password опция сбрасывается (или в обычном случае выдается ошибка, если указан пароль, не соответствующий ни одному имени базы данных).

Вот стенограмма:

    $ mysqldump -u test -h myhost --no-data --tables --password lost
    Введите пароль: 
    - MySQL dump 10.10
    mysqldump: ошибка: 1044: доступ пользователю 'test'@'%' запрещен
    база данных "проиграет" при выборе базы данных

Итак, что дает? Это так, как это должно работать? Это, безусловно, не имеет смысла и не соответствует официальной документации. И, наконец, если это так, как это работает, как я должен указать пароль, который будет использоваться в автоматизированной работе? С помощью expect???

я использую mysqldump Ver 10.10 Distrib 5.0.22, for pc-linux-gnu (i486),

10 ответов

Решение

От человека mysqldump:

--password [= пароль], -p[пароль]

Пароль для использования при подключении к серверу. Если вы используете краткую форму опции (-p), между ней и паролем не должно быть пробела. Если вы опускаете значение пароля после параметра --password или -p в командной строке, вам будет предложено ввести его.
Указание пароля в командной строке следует считать небезопасным. См. Раздел 6.6, "Сохранение вашего пароля в безопасности".

Синтаксически, вы не используете ключ --password правильно. Таким образом, синтаксический анализатор командной строки видит использование вами "потерять" как отдельный аргумент, который mysqldump интерпретирует как имя базы данных, как если бы вы попытались выполнить более простую команду, такую ​​как mysqldump lose

Чтобы исправить это, попробуйте использовать --password=lose или же -plose или просто использовать -p или же --password и введите пароль при появлении запроса.

Другой вариант - создать файл ~ /.my.cnf (разрешения должны быть 600).

Добавьте это в файл.my.cnf

[client]
password=lose

Это позволяет вам подключаться как пользователь MySQL, которому требуется пароль без необходимости его ввода. Вам даже не нужен ключ -p или --password.

Очень удобно для написания сценариев команд mysql и mysqldump.

Я обнаружил, что это происходит, если в вашем пароле есть специальные символы. Пароль MySQL здесь имеет! в нем, поэтому я должен сделать == пароль ='xxx!xxxx', чтобы он работал правильно. Обратите внимание на отметки.

Попробуйте поместить '=' между --password lost:

--password=lose

Если вы используете -p, то между -p и паролем не должно быть пробела, то есть '-plose'.

Вы пробовали --password= любой пароль?

Возможно, я упускаю вопрос, но это то, что я делаю, чтобы запустить инструмент.

Я не уверен, работает ли он для версии --password, но если вы используете -p, вы можете указать пароль сразу после этого (ключ не должен включать пробел):

mysqldump -pmypassword...

Если вы используете -p или --password без аргумента, вы получите приглашение с просьбой ввести пароль.

Если вы хотите указать пароль в командной строке, вы должны использовать -pYOURPASSWORD или --password=YOURPASSWORD. Обратите внимание, что после -p пробела нет, а после --password есть знак "=".

В вашем примере mysqldump запрашивает пароль, а затем обрабатывает "потерять" как имя базы данных. Если это был ваш пароль, вы должны были включить "="

--password[= пароль]

Вот документация

Опция -p не требует аргумента. Вы просто указываете -p или --password, чтобы указать, что вы собираетесь использовать пароль для доступа к базе данных. Причина, по которой он создает дамп базы данных с именем, которое вы указали после -p, заключается в том, что последним аргументом для mysqldump должно быть имя базы данных, которую вы хотите вывести (или --all-database, если вы хотите их все).

@ Ответ Натана тоже правдив. Вы можете указать пароль сразу после ключа -p (полезно в сценариях и таких, где вы не можете ввести его вручную после выполнения команды).

Может быть, ваш пользователь "test" не имеет прав доступа к вашей базе данных "lost"?

Другие вопросы по тегам