28 votes

Depuis un Shell Shell, comment puis-je vérifier si une base de données MySQL existe ?

mysqladmin -uroot create foo renvoie un statut de sortie de 1 si foo existe, et 0 sinon, mais bien sûr il créera aussi la base de données si elle n'existe pas déjà. Existe-t-il un moyen facile de vérifier simplement si une base de données existe ?

51voto

Eric Noob Points 531

Je me rends compte que la réponse à cette question date d'il y a longtemps, mais il me semble que c'est beaucoup plus propre de procéder ainsi :

mysql -u root -e 'use mydbname'

Si la base de données existe, cela ne produira aucune sortie et se terminera avec returncode == 0.

Si la base de données n'est pas existe, cela produira un message d'erreur sur stderr et sortir avec returncode == 1. Donc vous feriez quelque chose comme ça :

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

Cela fonctionne bien avec Shell Shell, ne nécessite aucun traitement de la sortie, et ne dépend pas d'avoir un accès local au système de fichiers.

1 votes

Pour ceux qui voudraient supprimer le message d'erreur, essayez ceci (bien sûr, pensez à retirer votre mot de passe par sécurité) : if ! mysql -u <user> -p<pw> -e 'use <db name>' 2> /dev/null ; then mysql -u <user> -p<pw> -e 'CREATE DATABASE <db name>;' ; fi

11voto

Hallgrim Points 7198

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

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

6 votes

Merci. Avec quelques options de ligne de commande supplémentaires, il s'intègre mieux dans Shell Shell : mysql --batch --skip-column-names -e "SHOW DATABASES LIKE 'foo'" | grep foo .

7voto

Lekensteyn Points 5981

Les bases de données dans MySQL sont des dossiers dans le système de fichiers. Il est donc très facile de savoir si une base de données existe :

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

Dans ce cas, /var/lib est le datadir de MySQL. L'avantage de cet extrait est qu'il n'a pas besoin d'un démon MySQL en cours d'exécution, ni d'informations d'identification. Bien sûr, l'utilisateur qui exécute la commande doit être autorisé à descendre dans ce répertoire.

7voto

Rob Barreca Points 171

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

0 votes

La façon idéale de le vérifier.

2voto

Donald Points 341

C'est un peu compliqué, mais cela affichera 1 si foo n'existe pas, 0 sinon :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X