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

StackOverflow https://stackoverflow.com/questions/148951

Вопрос

Я пытаюсь использовать 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).

Это было полезно?

Решение

От man mysqldump:

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

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

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

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

Другие советы

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

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

[client]
password=lose

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

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

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

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

mysqldump -пароль pmypassword ...

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

--password=lose

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

Вы пробовали --password=что бы там ни было-password-is?

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top