mysqladmin -uroot create foo
restituisce uno stato di uscita pari a 1 se foo
esiste e 0 altrimenti, ma ovviamente creerà anche il database se non esiste già. C'è un modo semplice per verificare semplicemente se esiste un database?
mysqladmin -uroot create foo
restituisce uno stato di uscita pari a 1 se foo
esiste 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:
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.
mysql -e "SHOW DATABASES LIKE 'foo'"
dovrebbe aiutarti.
mysql --batch --skip-column-names -e "SHOW DATABASES LIKE 'foo'" | grep foo
.
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.
Da http://www.jbmurphy.com/2011/02/08/quick-check-if-a-mysql-database-exists/ questo è più simile a quello che volevo:
DBNAME="dblookingfor"
DBEXISTS=$(mysql --batch --skip-column-names -e "SHOW DATABASES LIKE '"$DBNAME"';" | grep "$DBNAME" > /dev/null; echo "$?")
if [ $DBEXISTS -eq 0 ];then
echo "A database with the name $DBNAME already exists."
else
echo " database $DBNAME does not exist."
fi
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 exit
immediatamente. Quindi, se la connessione è ok, exitcode sarà 0, altrimenti diverso da zero.
Ovviamente, puoi reindirizzare qualsiasi output a /dev/null
se 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.