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

9

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

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

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

aduljr
источник

Ответы:

4

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

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

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

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

Insyte
источник
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 , который позволяет хранить учетные данные в зашифрованном файле. Спасибо Джованни за упоминание об этом мне.

Zoredache
источник
это конкретный пользователь для этой базы данных с достаточным разрешением для выполнения резервного копирования. Только два человека имеют доступ к этому серверу, мой и еще один человек. Но я воспользуюсь этой идеей cnf-файла. никогда не знал об этом варианте. спасибо
Прочитать
3
Я знаю, что это старый ответ, но все равно обнаруживается при поиске, как безопасно передать пароль, и он также связан с другими сообщениями. В версии 5.5 мне пришлось инкапсулировать пароль-пароль в одну галочку в файле конфигурации, например, если мой пароль - aoeu1234мой файл конфигурации password = 'aoeu1234'; в противном случае вы получите несанкционированную ошибку.
Дэймон
Хотите знать, есть ли решение, которое не включает пароль в виде открытого текста в файле .cnf?
Боб Стейн
@Zoredache, как "любой, кто может запустить ps, может найти пароль для вашего сервера"?
Пейсер
@ Damon, а что если в твоем пароле есть эти галочки?
Пейсер