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

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

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 vou continuar as outras coisas ou então saio dizendo que a tabela não existe. Como posso conseguir isso.

Responder1

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
  • -Npara pular os nomes das colunas
  • -spara saída não tabular

Responder2

No MySQL você pode usar -e do shell

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

Responder3

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ê terá que substituir o caminho do seu diretório de dados, o nome do seu banco de dados e o nome da sua tabela na primeira linha.

Ressalvas:

  1. Isso não funcionará se você estiver usando InnoDB e estivernãousando innodb-file-per-table. 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 mudar de MyISAM para 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 pelos motivos acima, mas evita o cliente mysql, então ainda pode valer a pena.

Observe que todos os métodos apresentados aqui dependem de você obter suas próprias permissões (sistema de arquivos ou MySQL) corretas. Se você errar, provavelmente obterá um falso negativo.

informação relacionada