Da uno script di shell, come posso verificare se esiste un database MySQL?


23

mysqladmin -uroot create foorestituisce uno stato di uscita pari a 1 se fooesiste e 0 altrimenti, ma ovviamente creerà anche il database se non esiste già. C'è un modo semplice per verificare semplicemente se esiste un database?

Risposte:


43

Mi rendo conto che è stato risposto molto tempo fa, ma mi sembra molto più pulito farlo:

mysql -u root -e 'use mydbname'

Se il database esiste, questo non produrrà alcun output e uscirà con returncode == 0.

Se il database non esiste, questo produrrà un messaggio di errore su stderr e uscirà con returncode == 1. Quindi faresti qualcosa del genere:

if ! mysql -u root -e 'use mydbname'; then
  ...do stuff to create database...
fi

Funziona bene con gli script di shell, non richiede alcuna elaborazione dell'output e non si basa sull'accesso locale al filesystem.


1
Per chiunque desideri sopprimere il messaggio di errore, prova questo (ovviamente, prendi in considerazione la sicurezza della password): if! mysql -u <utente> -p <pw> -e 'usa <nome db>' 2> / dev / null; quindi mysql -u <utente> -p <pw> -e 'CREA DATABASE <nome db>;'; fi
Peter Mark,


7

I database in MySQL sono cartelle nel filesystem. Ciò rende dannatamente facile scoprire se esiste un database:

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

In questo caso, /var/libè il datadir di MySQL. La cosa bella di questo frammento è che non avrà bisogno di un demone MySQL in esecuzione, né ha bisogno di credenziali. Ovviamente l'utente che esegue il comando deve poter scendere in quella directory.



2

Un po 'confuso, ma questo stampa 1 se non esiste foo, 0 altrimenti:

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

2

Penso che tu possa verificare se il tuo database necessario funziona in modo semplice in qualsiasi shell

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

e quindi controlla il $?codice di uscita

Questo comando prova le tue credenziali specifiche (USERNAME e PASSWORD) per connettersi al DATABASE selezionato e exitimmediatamente. Quindi, se la connessione è ok, exitcode sarà 0, altrimenti diverso da zero.

Ovviamente, puoi reindirizzare qualsiasi output a /dev/nullse necessario

PS. Questo metodo è molto utile per controllare la salute dei depositi effimeri che sono così veloci e popolari ai nostri giorni. Se il database non può essere collegato, è necessario avviare il ripristino al più presto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.