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.

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

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 $?

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.

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.