Desde un script de shell, ¿cómo puedo verificar si existe una base de datos MySQL?


23

mysqladmin -uroot create foodevuelve un estado de salida de 1 si fooexiste, y 0 en caso contrario, pero por supuesto también creará la base de datos si aún no existe. ¿Hay alguna manera fácil de simplemente verificar si existe una base de datos?

Respuestas:


43

Me doy cuenta de que esto fue respondido hace mucho tiempo, pero me parece mucho más limpio hacer esto:

mysql -u root -e 'use mydbname'

Si la base de datos existe, esto no producirá salida y saldrá con returncode == 0.

Si la base de datos no existe, esto generará un mensaje de error en stderr y saldrá con returncode == 1. Entonces haría algo como esto:

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

Esto funciona bien con los scripts de shell, no requiere ningún procesamiento de la salida y no depende de tener acceso al sistema de archivos local.


1
Para cualquiera que quiera suprimir el mensaje de error, intente esto (por supuesto, considere sacar su contraseña por seguridad): ¡si! mysql -u <usuario> -p <pw> -e 'use <nombre db>' 2> / dev / null; entonces mysql -u <usuario> -p <pw> -e 'CREAR BASE DE DATOS <nombre db>;'; fi
Peter Mark


7

Las bases de datos en MySQL son carpetas en el sistema de archivos. Eso hace que sea muy fácil encontrar si existe una base de datos:

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

En este caso, /var/libes el datadir de MySQL. Lo bueno de este fragmento es que no necesitará un demonio MySQL en ejecución, ni tampoco necesita credenciales. Por supuesto, el usuario que ejecuta el comando debe poder descender a ese directorio.



2

Un poco hacky, pero esto imprimirá 1 si foo no existe, 0 de lo contrario:

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

2

Creo que puede verificar si su base de datos necesaria funciona de manera simple en cualquier shell

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

y luego verifique el $?código de salida

Este comando prueba sus credenciales específicas (NOMBRE DE USUARIO y CONTRASEÑA) para conectarse a la BASE DE DATOS seleccionada e exitinmediatamente. Entonces, si la conexión está bien, el código de salida será 0 y, de lo contrario, no será cero.

Por supuesto, puede redirigir cualquier salida /dev/nullsi es necesario

PD. Este método es muy útil para verificar la salud de los almacenamientos efímeros que son tan rápidos y populares en nuestros días. Si la base de datos no se puede conectar, debe comenzar a restaurar lo antes posible.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.