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

удалены общие теги, добавлены ошибки

Sklivvz 29.09.2008 19:01
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
34
1
55 347
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Вы пробовали --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 - нет. Не интуитивно понятный дизайн.

John Zwinck 29.09.2008 19:19

Есть идеи, как заставить mysqldump выдать мне «Предупреждение: использование пароля в интерфейсе командной строки может быть небезопасным»?

Ian Vaughan 28.06.2013 13:53

Попробуйте поставить '=' между --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', чтобы он работал правильно. Обратите внимание на знаки.

Спасибо! Сэкономил мне часы

Neo Ighodaro 30.03.2017 12:29

Сэкономил мне и часы!

lookdad 08.09.2017 16:50

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