mysqldump запрашивает пароль в шеллскрипте


9

Я написал простой сценарий оболочки для дампа конкретной базы данных MySQL. Проблема в том, что он запрашивает у меня пароль, хотя я предоставляю. Mysql db - это версия 5.0.27, если это имеет значение. Вот конкретная строка, которую я использую.

$MYSQLDUMP -u backup -p$MyPass $DB > $DEST/$FILE

Я перепробовал несколько вариантов, но безрезультатно.

Ответы:


4

Я бы поспорил, что $MyPassв вашем скрипте не устанавливается должным образом. Если какой-либо из инструментов командной строки mysql получает a -p, за которым сразу не следует пароль, они предполагают, что должны запросить пароль. Если, с другой стороны, вы ввели неверный пароль (или неправильное имя пользователя или подобное), он просто не сможет подключиться.

Итак, я предлагаю поместить echoкоманду в начале этой строки и перезапустить ваш скрипт, например так:

echo $MYSQLDUMP -u backup -p$MyPass $DB

Не забудьте удалить перенаправление вывода.


1
doh, это была глупая переменная, которая имела заглавные буквы, когда она была указана в нижнем регистре в приведенной выше строке. спасибо, ребята,
адъюджер

18

Лучшим решением было бы сохранить имя пользователя и пароль в файле конфигурации и указать на этот файл конфигурации. Имея его в командной строке, любой, кто может запустить ps, сможет найти пароль для вашего сервера.

Передайте в --defaults-extra-file=/pathto/database.cnfMySQL свалку.

Файл конфигурации должен выглядеть следующим образом. Установите разрешения файловой системы, чтобы только файл резервного копирования мог открыть файл конфигурации.

[client]
host     = servername.domain.tld
user     = backup
password = strongpassword

Обновление (2016-06-29) Если вы работаете с mysql 5.6.6 или более поздней версии, обратите внимание на инструмент mysql_config_editor , который позволяет хранить учетные данные в зашифрованном файле. Спасибо Джованни за упоминание об этом мне.


это конкретный пользователь для этой базы данных с достаточным разрешением для выполнения резервного копирования. Только два человека имеют доступ к этому серверу, мой и еще один человек. Но я воспользуюсь этой идеей cnf-файла. никогда не знал об этом варианте. спасибо
Прочитать

3
Я знаю, что это старый ответ, но все равно обнаруживается при поиске, как безопасно передать пароль, и он также связан с другими сообщениями. В версии 5.5 мне пришлось инкапсулировать пароль-пароль в одну галочку в файле конфигурации, например, если мой пароль - aoeu1234мой файл конфигурации password = 'aoeu1234'; в противном случае вы получите несанкционированную ошибку.
Дэймон

Хотите знать, есть ли решение, которое не включает пароль в виде открытого текста в файле .cnf?
Боб Стейн

@Zoredache, как "любой, кто может запустить ps, может найти пароль для вашего сервера"?
Пейсер

@ Damon, а что если в твоем пароле есть эти галочки?
Пейсер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.