21 votos

A partir de una secuencia de comandos de shell, ¿cómo puedo comprobar si una base de datos MySQL existe?

mysqladmin -uroot create foo devuelve un estado de salida de 1 si foo existe, y 0 de otra manera, pero, por supuesto, también se creará la base de datos si no existe ya. ¿Hay alguna forma fácil de comprobar simplemente si existe una base de datos?

39voto

Eric Noob Puntos 531

Me doy cuenta de que esto era respondida hace mucho tiempo, pero parece mucho más limpio para mí hacer esto:

mysql -u root -e 'use mydbname'

Si existe la base de datos, esto va a producir ninguna salida y salir con returncode == 0.

Si la base de datos no existe, se producirá un mensaje de error en stderr y salir con returncode == 1. Así que se podría hacer algo como esto:

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

Esto funciona muy bien con los scripts de shell, no requiere ningún procesamiento de la salida, y no se basan en tener un sistema de archivo local de acceso.

21voto

Donald Puntos 311

Un poco chapucero, pero esto va a imprimir 1 si foo no existe, 0 en caso contrario:

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

9voto

Hallgrim Puntos 7198

mysql -e "SHOW DATABASES LIKE 'foo'" debe ayudarle.

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

6voto

Lekensteyn Puntos 2824

Bases de datos en MySQL son carpetas del sistema de archivos. Que hacer maldita sea fácil de encontrar si existe una base de datos:

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

En este caso, /var/lib es el datadir de MySQL. La cosa buena acerca de este fragmento es que no necesita un demonio de MySQL se ejecuta, no se necesitan credenciales. Por supuesto, el usuario que ejecuta el comando debe ser permitido a descender en ese directorio.

5voto

Rob Barreca Puntos 131

De http://www.jbmurphy.com/2011/02/08/quick-check-if-a-mysql-database-exists/ esto es más parecido a lo que yo quería:

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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: