Действительно ли mysqldump --password делает то, что говорит? - PullRequest
34 голосов
/ 29 сентября 2008

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

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

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

Вот расшифровка:

    $ mysqldump -u test -h myhost --no-data --tables --password lose
    Enter password: 
    -- MySQL dump 10.10
    mysqldump: Got error: 1044: Access denied for user 'test'@'%' to
    database 'lose' when selecting the database

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

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

Ответы [ 10 ]

79 голосов
/ 29 сентября 2008

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

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

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

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

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

13 голосов
/ 29 сентября 2008

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

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

[client]
password=lose

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

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

9 голосов
/ 08 апреля 2010

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

3 голосов
/ 29 сентября 2008

Попробуйте поставить '=' между --password, потерять как:

--password=lose

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

3 голосов
/ 29 сентября 2008

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

mysqldump -pmypassword ...

2 голосов
/ 29 сентября 2008

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

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

1 голос
/ 29 сентября 2008

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

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

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

0 голосов
/ 29 сентября 2008

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

0 голосов
/ 29 сентября 2008

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

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

0 голосов
/ 29 сентября 2008

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

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

...