De um script de shell, como posso verificar se existe um banco de dados MySQL?

22

mysqladmin -uroot create foo retorna um status de saída de 1 se foo existir e 0 caso contrário, mas é claro que também criará o banco de dados se ele ainda não existir. Existe alguma maneira fácil de simplesmente verificar se existe um banco de dados?

    
por ithinkihaveacat 24.08.2010 / 19:10

6 respostas

42

Eu percebi que isso foi respondido há muito tempo, mas parece muito mais limpo para mim fazer isso:

mysql -u root -e 'use mydbname'

Se o banco de dados existir, isso não produzirá saída e sairá com returncode == 0.

Se o banco de dados não existir , isso produzirá uma mensagem de erro em stderr e sairá com returncode == 1. Então você faria algo assim:

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

Isso funciona bem com scripts de shell, não requer nenhum processamento da saída e não depende do acesso local ao sistema de arquivos.

    
por 20.04.2012 / 20:56
10

mysql -e "SHOW DATABASES LIKE 'foo'" deve ajudá-lo.

link

    
por 24.08.2010 / 19:16
7

Bancos de dados no MySQL são pastas no sistema de arquivos. Isso torna muito fácil descobrir se existe um banco de dados:

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

Nesse caso, /var/lib é o datadir do MySQL. O legal desse snippet é que ele não precisará de um daemon do MySQL em execução, nem precisa de credenciais. É claro que o usuário que está executando o comando deve ter permissão para descer nesse diretório.

    
por 24.08.2010 / 19:49
5

De link isso é mais parecido para o que eu queria:

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
    
por 21.03.2012 / 04:32
2

Um pouco hacky, mas isso irá imprimir 1 se foo não existir, 0 caso contrário:

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

Eu acho que você pode verificar se o seu banco de dados necessário está funcionando de maneira simples em qualquer shell

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

e, em seguida, verifique $? para o código de saída

Este comando tenta que suas credenciais específicas (USERNAME e PASSWORD) se conectem a DATABASE selecionada e exit imediatamente. Então, se a conexão for ok, exitcode será 0 e diferente de zero.

É claro que você pode redirecionar qualquer saída para /dev/null , se necessário

PS. Este método é muito útil para verificar a saúde de armazenamentos efêmeros, que são tão rápidos e populares nos nossos dias. Se o banco de dados não pode ser conectado, você deve começar a restaurar o mais cedo possível.

    
por 06.04.2014 / 23:28