Подтвердить что ты не робот

Действительно ли 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).

4b9b3361

Ответ 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 (полезно в сценариях и т.д., Когда вы не можете ввести его вручную после выполнения команды).

Ответ 10

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