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


22

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

Respostas:


42

Sei que isso foi respondido há muito tempo, mas me parece muito mais limpo fazer isso:

mysql -u root -e 'use mydbname'

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

Se o banco de dados não existir, isso produzirá uma mensagem de erro no 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 de ter acesso local ao sistema de arquivos.


1
Para quem quiser suprimir a mensagem de erro, tente o seguinte (é claro, considere remover sua senha por segurança): if! mysql -u <usuário> -p <pw> -e 'use <nome do banco de dados>' 2> / dev / null; então mysql -u <usuário> -p <pw> -e 'CREATE DATABASE <nome do banco de dados>;'; fi #
Peter Mark


7

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

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

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



2

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

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

2

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

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

e verifique o $?código de saída

Este comando tenta suas credenciais específicas (USERNAME e PASSWORD) para se conectar ao DATABASE selecionado e exitimediatamente. Portanto, se a conexão estiver correta, exitcode será 0 e diferente de zero.

Obviamente, você pode redirecionar qualquer saída para, /dev/nullse necessário

PS. Este método é muito útil para verificar a saúde dos depósitos efêmeros que são tão rápidos e populares nos dias de hoje. Se o banco de dados não puder ser conectado, você deverá iniciar a restauração o mais rápido possível.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.