W skrypcie powłoki, jak mogę sprawdzić, czy istnieje baza danych MySQL?


23

mysqladmin -uroot create foozwraca status wyjścia 1, jeśli fooistnieje, a 0 w przeciwnym razie, ale oczywiście utworzy również bazę danych, jeśli jeszcze nie istnieje. Czy jest jakiś prosty sposób, aby po prostu sprawdzić, czy baza danych istnieje?

Odpowiedzi:


43

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.


1
Dla każdego, kto może chcieć ukryć komunikat o błędzie, spróbuj tego (oczywiście rozważ usunięcie swojego hasła ze względów bezpieczeństwa): jeśli! mysql -u <użytkownik> -p <pw> -e 'użyj <nazwa_db>> 2> / dev / null; następnie mysql -u <użytkownik> -p <pw> -e 'CREATE DATABASE <nazwa bazy danych>;'; fi
Peter Mark


7

Bazy danych w MySQL to foldery w systemie plików. Dzięki temu cholernie łatwo jest ustalić, czy baza danych istnieje:

test -d "/var/lib/mysql/databasename"

W tym przypadku /var/libjest 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.



2

Trochę hacky, ale to wypisze 1, jeśli foo nie istnieje, 0 w przeciwnym razie:

mysqlshow -u root foo 2>&1 >/dev/null | awk ' { print /Unknown database/ }'

2

Myślę, że możesz sprawdzić, czy potrzebna baza danych działa w prosty sposób w dowolnej powłoce

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

a następnie sprawdź $? kod wyjścia

To polecenie próbuje użyć określonych poświadczeń (NAZWA UŻYTKOWNIKA i HASŁO), aby połączyć się z wybraną bazą danych i exitnatychmiast. 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/nullrazie potrzeby

PS. 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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.