Em um script de shell, como posso verificar se existe ou não uma tabela no banco de dados MySQL?

8

Estou tentando escrever um script que permita ao usuário selecionar a manipulação que ele precisa fazer em uma tabela. Quero verificar se a tabela existe ou não. Se existir, continuarei com as outras coisas ou saio dizendo que a tabela não existe. Como eu posso conseguir isso.

RathanKalluri
fonte

Respostas:

12
if [ $(mysql -N -s -u root -p -e \
    "select count(*) from information_schema.tables where \
        table_schema='db_name' and table_name='table_name';") -eq 1 ]; then
    do something
else
    echo "table <table_name> does not exist"
    exit 1
fi
  • -N pular nomes de colunas
  • -s para saída nãoabular
quanta
fonte
2
Para que seu script efetue login no MySQL sem parar e solicitar uma senha, você pode criar um .my.cnfarquivo em seu diretório pessoal e adicionar um [client]bloco contendo password="my_password". Consulte a seção sobre arquivos de opções do usuário no manual.
Ladadadada
4

No MySQL você pode usar -e do shell

mysql -e "desc main_db.clients" > /dev/null 2>&1
echo $?
Glen
fonte
3

Se você deseja um método que não envolva a execução de um cliente mysql e o login no servidor mysql, você pode fazer o seguinte:

if ls -l /var/lib/mysql/database/table.frm 2> /dev/null > /dev/null
then
  echo Table exists
else
  echo Table does not exist
fi

Você precisará substituir o caminho para o diretório de dados, o nome do banco de dados e o nome da tabela na primeira linha.

Ressalvas:

  1. Isso não funcionará se você estiver usando o InnoDB e não estiver usando o arquivo innodb por tabela. ou seja, o script pode dizer que a tabela não existe, mesmo que exista.
  2. É possível que esse arquivo exista por vários motivos, incluindo copiar tabelas usando o sistema de arquivos ou alternar do MyISAM para o InnoDB. ou seja, o script pode dizer que a tabela existe mesmo que não exista.

Não é tão confiável quanto os outros métodos já apresentados por causa dos motivos acima, mas evita o cliente mysql, portanto ainda pode valer a pena.

Observe que todos os métodos apresentados aqui dependem da obtenção correta de suas próprias permissões (sistema de arquivos ou MySQL). Se você errar, provavelmente terá um falso negativo.

Ladadadada
fonte