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






Вы пробовали --password = любой-пароль-есть?
Возможно, я упускаю вопрос, но это то, что я делаю, чтобы запустить инструмент.
Я не уверен, работает ли это для версии --password, но если вы используете -p, вы можете указать пароль сразу же после этого (ключ не должен включать пробел):
mysqldump -pmypassword ...
Параметр -p не требует аргумента. Вы просто указываете -p или --password, чтобы указать, что вы собираетесь использовать пароль для доступа к базе данных. Причина, по которой он сбрасывает базу данных с именем, указанным вами после -p, заключается в том, что последним аргументом для mysqldump должно быть имя базы данных, которую вы хотите сбросить (или --all-databases, если вы хотите их все).
@ Ответ Натана тоже верен. Вы можете указать пароль немедленно после переключателя -p (полезно в сценариях и тому подобном, где вы не можете ввести его вручную после выполнения команды).
От человека mysqldump:
--password[=password], -p[password]
The password to use when connecting to the server. If you use the short option form (-p), you cannot have a space between the option and the password. If you omit the password value following the --password or -p option on the command line, you are prompted for one.
Specifying a password on the command line should be considered insecure. See Section 6.6, "Keeping Your Password Secure".
Синтаксически вы неправильно используете переключатель --password. Таким образом, синтаксический анализатор командной строки видит, что вы используете «потерять» как отдельный аргумент, который mysqldump интерпретирует как имя базы данных, как если бы вы попытались выполнить более простую команду, например mysqldump lose.
Чтобы исправить это, попробуйте использовать --password=lose или -plose или просто используйте -p или --password и введите пароль при появлении запроса.
Вы совершенно правы - спасибо. Действительно странно, как вариант -u username позволяет использовать пространство, а вариант -ppassword - нет. Не интуитивно понятный дизайн.
Есть идеи, как заставить mysqldump выдать мне «Предупреждение: использование пароля в интерфейсе командной строки может быть небезопасным»?
Попробуйте поставить '=' между --password lost, например:
--password=lose
Если вы используете -p, тогда не может быть пробела между -p и паролем, т.е. '-plose'.
--password [= пароль]
Вот документация
Другой вариант - создать файл ~ / .my.cnf (права доступа должны быть 600).
Добавьте это в файл .my.cnf
[client]
password=lose
Это позволяет вам подключаться как пользователь MySQL, которому требуется пароль, без необходимости вводить пароль. Вам даже не нужны -p или --password.
Очень удобно для написания команд mysql и mysqldump.
Если вы используете -p или --password без аргумента, вы получите приглашение ввести пароль.
Если вы хотите указать пароль в командной строке, вы должны использовать -pYOURPASSWORD или --password = YOURPASSWORD. Обратите внимание, что после -p нет пробела, а после --password стоит знак «=».
В вашем примере mysqldump запрашивает пароль, а затем рассматривает «потерять» как имя базы данных. Если это был ваш пароль, вы должны были включить "="
Может быть, ваш пользовательский "test" не имеет разрешения на доступ к вашей "проигравшей" базе данных?
Я обнаружил, что это происходит, если в вашем пароле есть специальные символы. Пароль mysql здесь имеет! в нем, поэтому мне нужно сделать == password = 'xxx! xxxx', чтобы он работал правильно. Обратите внимание на знаки.
Спасибо! Сэкономил мне часы
Сэкономил мне и часы!
удалены общие теги, добавлены ошибки