Zdaję sobie sprawę, że już dawno na nie odpowiedziano, ale wydaje mi się to o wiele czystsze:
mysql -u root -e 'use mydbname'
Jeśli baza danych istnieje, nie spowoduje to wyjścia i zakończy się kodem powrotu == 0.
Jeśli baza danych nie istnieje, spowoduje to wygenerowanie komunikatu o błędzie na stderr i wyjście z kodem powrotu == 1. Więc zrobiłbyś coś takiego:
if ! mysql -u root -e 'use mydbname'; then
...do stuff to create database...
fi
Działa to dobrze ze skryptami powłoki, nie wymaga przetwarzania danych wyjściowych i nie zależy od dostępu do lokalnego systemu plików.
mysql -e "SHOW DATABASES LIKE 'foo'"
powinien ci pomóc.http://dev.mysql.com/doc/refman/5.1/en/show-databases.html
źródło
mysql --batch --skip-column-names -e "SHOW DATABASES LIKE 'foo'" | grep foo
.Bazy danych w MySQL to foldery w systemie plików. Dzięki temu cholernie łatwo jest ustalić, czy baza danych istnieje:
W tym przypadku
/var/lib
jest to katalog danych MySQL. Zaletą tego fragmentu jest to, że nie będzie on potrzebował uruchomionego demona MySQL, ani poświadczeń. Oczywiście użytkownik uruchamiający polecenie musi mieć możliwość zejścia do tego katalogu.źródło
Od http://www.jbmurphy.com/2011/02/08/quick-check-if-a-mysql-database-exists/ jest to bardziej zbliżone do tego, czego chciałem:
źródło
Trochę hacky, ale to wypisze 1, jeśli foo nie istnieje, 0 w przeciwnym razie:
źródło
Myślę, że możesz sprawdzić, czy potrzebna baza danych działa w prosty sposób w dowolnej powłoce
a następnie sprawdź
$?
kod wyjściaTo polecenie próbuje użyć określonych poświadczeń (NAZWA UŻYTKOWNIKA i HASŁO), aby połączyć się z wybraną bazą danych i
exit
natychmiast. Tak więc, jeśli połączenie jest prawidłowe, kodem wyjścia będzie 0, a w przeciwnym razie zero.Oczywiście możesz przekierować dowolne wyjście w
/dev/null
razie potrzebyPS. Ta metoda jest bardzo przydatna do sprawdzania stanu efemerycznych magazynów, które są tak szybkie i popularne w naszych czasach. Jeśli nie można połączyć się z bazą danych, należy przywrócić jak najszybciej.
źródło