Действительно ли 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 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)
.
Ответы
Ответ 1
От человека mysqldump:
- пароль [= пароль], -p [пароль]
Пароль для использования при подключении к серверу. Если вы используете короткая форма формы (-p), у вас не может быть пробела между опцией и пароль. Если вы опустите значение пароля после --password или -p в командной строке, вам предлагается один.
Задание пароля в командной строке следует учитывать небезопасный. См. Раздел 6.6, "Сохранение пароля".
Синтаксически вы не используете ключ -password правильно. Таким образом, синтаксический анализатор командной строки видит, что вы используете "потерять" в качестве автономного аргумента, который mysqldump интерпретирует как имя базы данных, как если бы вы попытались выполнить более простую команду, например mysqldump lose
Чтобы исправить это, попробуйте использовать --password=lose
или -plose
или просто используйте -p
или --password
и введите пароль при появлении запроса.
Ответ 2
Другой вариант - создать файл ~/.my.cnf (разрешения должны быть 600).
Добавьте это в файл .my.cnf
[client]
password=lose
Это позволяет вам подключаться как пользователь MySQL, которому требуется пароль без фактического ввода пароля. Вам даже не нужен -p или -password.
Очень удобно для написания команд mysql и mysqldump.
Ответ 3
Я обнаружил, что это происходит, если в вашем пароле есть специальные символы. Пароль mysql здесь имеет! в нем, поэтому я должен сделать == password = 'xxx! xxxx', чтобы он работал корректно. Обратите внимание на отметки.
Ответ 4
Попробуйте поместить "=" между "passpass", например:
--password=lose
Если вы используете -p, между -p и паролем может быть пробел, т.е. "-plose".
Ответ 5
Вы пытались --password = any-password-is?
Возможно, мне не хватает вопроса, но это то, что я делаю, чтобы запустить этот инструмент.
Ответ 6
Я не уверен, что он работает для версии -password, но если вы используете -p, вы можете сразу указать пароль (ключ не должен содержать пробел):
mysqldump -pmypassword...
Ответ 7
Если вы используете -p или -password без аргумента, вы получите приглашение с просьбой вставить пароль.
Если вы хотите указать пароль в командной строке, вы должны использовать -pYOURPASSWORD или --password = YOURPASSWORD. Обратите внимание, что после -p нет пробела, и после -password появляется знак "=".
В вашем примере mysqldump запрашивает пароль, а затем обрабатывает "потерять" в качестве имени базы данных. Если это ваш пароль, вы должны включить "="
Ответ 8
Параметр -p не требует аргумента. Вы просто поместите -p или -password, чтобы указать, что вы собираетесь использовать пароль для доступа к базе данных. Причина, по которой он сбрасывает базу данных по имени, которую вы положили после -p, состоит в том, что последний аргумент для mysqldump должен быть именем базы данных, которую вы хотите сбросить (или -all-databases, если вы хотите их всех).
@Ответ Натана также верен. Вы можете указать пароль сразу после ключа -p (полезно в сценариях и т.д., Когда вы не можете ввести его вручную после выполнения команды).
Ответ 9
- пароль [= пароль]
Вот документация
Ответ 10
Возможно, у вашего пользователя "тест" нет разрешения на доступ к вашей "потерянной" базе данных?