mysqladmin -uroot create foo
renvoie un état de sortie de 1 si foo
existe, et 0 sinon, mais bien sûr, il créera également la base de données si elle n'existe pas déjà. Existe-t-il un moyen simple de vérifier simplement si une base de données existe?
Je sais que cela a été répondu il y a longtemps, mais il me semble beaucoup plus propre de le faire:
mysql -u root -e 'use mydbname'
Si la base de données existe, cela ne produira aucune sortie et quittera avec returncode == 0.
Si la base de données n'existe pas existe, cela produira un message d'erreur sur stderr et quittera avec returncode == 1. Vous feriez donc quelque chose comme ceci:
if ! mysql -u root -e 'use mydbname'; then
...do stuff to create database...
fi
Cela fonctionne bien avec les scripts Shell, ne nécessite aucun traitement de la sortie et ne dépend pas de l'accès au système de fichiers local.
mysql -e "SHOW DATABASES LIKE 'foo'"
devrait vous aider.
Les bases de données dans MySQL sont des dossiers dans le système de fichiers. Cela facilite grandement la recherche d'une base de données:
test -d "/var/lib/mysql/databasename"
Dans ce cas, /var/lib
est le datadir de MySQL. Ce qu'il y a de bien avec cet extrait, c'est qu'il n'aura pas besoin d'un démon MySQL en cours d'exécution, pas plus qu'il n'aura besoin d'informations d'identification. Bien sûr, l'utilisateur exécutant la commande doit être autorisé à descendre dans ce répertoire.
De http://www.jbmurphy.com/2011/02/08/quick-check-if-a-mysql-database-exists/ c'est plus proche de ce que je voulais:
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
Je pense que vous pouvez vérifier si votre base de données nécessaire fonctionne de manière simple dans n'importe quel shell
mysql -uUSERNAME -pPASSWORD DATABASE -e exit
puis vérifiez $?
pour le code de sortie
Cette commande essaie vos informations d'identification spécifiques (NOM D'UTILISATEUR et MOT DE PASSE) pour se connecter immédiatement à la BASE DE DONNÉES sélectionnée et à exit
. Donc, si la connexion est correcte, le code de sortie sera 0 et différent de zéro sinon.
Bien sûr, vous pouvez rediriger n'importe quelle sortie vers /dev/null
si besoin
PS. Cette méthode est très utile pour vérifier la santé des stockages éphémères qui sont si rapides et populaires de nos jours. Si la base de données ne peut pas être connectée, vous devez démarrer la restauration dès que possible.
Un peu hacky, mais cela affichera 1 si foo n'existe pas, 0 sinon:
mysqlshow -u root foo 2>&1 >/dev/null | awk ' { print /Unknown database/ }'