mysqldump monituje o podanie hasła w shellscript

9

Napisałem prosty skrypt powłoki, aby zrzucić konkretną bazę danych mysql. Problem polega na tym, że monituje mnie o hasło, mimo że podaję. Db mysql db ma wersję 5.0.27, jeśli to ma znaczenie. Oto konkretna linia, której używam.

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

Próbowałem kilku odmian, ale bezskutecznie.

aduljr
źródło

Odpowiedzi:

4

Założę się, że $MyPassnie jest ustawiony poprawnie w twoim skrypcie. Jeśli którekolwiek z narzędzi wiersza polecenia mysql otrzyma -phasło, po którym nie następuje natychmiast hasło, zakładają, że powinny poprosić o hasło. Z drugiej strony, jeśli podałeś niepoprawne hasło (lub niewłaściwą nazwę użytkownika lub podobną), połączenie się nie powiedzie.

Sugeruję więc umieszczenie echopolecenia na początku tego wiersza i ponowne uruchomienie skryptu:

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

Nie zapomnij usunąć przekierowania wyjściowego.

Insyte
źródło
1
doh, to była głupia zmienna, która przechodziła w wielkie litery, gdy była ustawiona względem małych liter w powyższej linii. dzięki chłopaki
aduljr
18

Lepszym rozwiązaniem byłoby przechowywanie nazwy użytkownika i hasła w pliku konfiguracyjnym i wskazywanie na ten plik konfiguracyjny. Mając go w wierszu poleceń, każdy, kto może uruchomić ps, może znaleźć hasło do twojego serwera.

Przekaż --defaults-extra-file=/pathto/database.cnfdo zrzutu mysql.

Plik konfiguracyjny musi wyglądać tak. Ustaw uprawnienia systemu plików, aby tylko proces tworzenia kopii zapasowej mógł otworzyć plik konfiguracji.

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

Aktualizacja (2016-06-29) Jeśli korzystasz z mysql 5.6.6 lub nowszego, powinieneś spojrzeć na narzędzie mysql_config_editor , które umożliwia przechowywanie poświadczeń w zaszyfrowanym pliku. Dzięki Giovanni za to, że mi o tym wspomniał.

Zoredache
źródło
jest to konkretny użytkownik dla tej bazy danych z uprawnieniami wystarczającymi do wykonania kopii zapasowej. Tylko dwie osoby mają dostęp do tego serwera, moja i jeszcze jedna osoba. Ale wykorzystam ten pomysł na plik cnf. nigdy nie wiedziałem o tej opcji. dzięki
aduljr
3
Wiem, że to stara odpowiedź, ale wciąż pojawia się podczas wyszukiwania, jak bezpiecznie przekazać hasło i jest ono również linkowane z innych postów. Korzystając z wersji 5.5, musiałem umieścić silne hasło w pojedynczych paskach w pliku konfiguracyjnym, na przykład jeśli moje hasło to aoeu1234, mój plik konfiguracyjny ma password = 'aoeu1234'; w przeciwnym razie otrzymasz nieautoryzowany błąd.
Damon
Zastanawiasz się, czy istnieje rozwiązanie, które nie zawiera hasła w postaci tekstu jawnego w pliku .cnf.
Bob Stein,
@Zoredache, w jaki sposób „każdy, kto potrafi uruchomić ps, może znaleźć hasło do twojego serwera”?
Pacerier
@Damon, a co jeśli twoje hasło ma te tiki?
Pacerier