web-dev-qa-db-fra.com

À partir d'un script Shell, comment puis-je vérifier s'il existe une base de données MySQL?

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?

23
ithinkihaveacat

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.

43
larsks

mysql -e "SHOW DATABASES LIKE 'foo'" devrait vous aider.

http://dev.mysql.com/doc/refman/5.1/en/show-databases.html

10
Dom

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.

7
Lekensteyn

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
6
Rob Barreca

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.

2
Wile E.

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/ }'
2
Donald