Desde un script de shell, ¿cómo puedo verificar si una tabla en la base de datos MySQL existe o no?

8

Estoy tratando de escribir una secuencia de comandos que permita a un usuario seleccionar qué manipulación necesita hacer en una tabla. Quiero verificar si la tabla existe o no. Si existe continuaré con las otras cosas o salgo diciendo que la tabla no existe. ¿Cómo podría lograr esto?

RathanKalluri
fuente

Respuestas:

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 para omitir nombres de columna
  • -s para salida no tabular
quanta
fuente
2
Para que su script inicie sesión en MySQL sin detenerse y solicitarle una contraseña, puede crear un .my.cnfarchivo en su directorio de inicio y agregar un [client]bloque que contenga password="my_password". Eche un vistazo a la sección sobre archivos de opciones de usuario en el manual.
Ladadadada
4

En MySQL puedes usar -e desde el shell

mysql -e "desc main_db.clients" > /dev/null 2>&1
echo $?
Cañada
fuente
3

Si desea un método que no implique ejecutar un cliente mysql e iniciar sesión en el servidor mysql, puede hacer esto:

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

Tendrá que reemplazar la ruta a su directorio de datos, el nombre de su base de datos y el nombre de su tabla en la primera línea.

Advertencias:

  1. Esto no funcionará si está utilizando InnoDB y no está utilizando innodb-file-per-table. es decir, el script puede decir que la tabla no existe aunque sí exista.
  2. Es posible que ese archivo exista por varias razones, incluida la copia de tablas usando el sistema de archivos o el cambio de MyISAM a InnoDB. es decir, el script puede decir que la tabla existe aunque no exista.

No es tan confiable como los otros métodos presentados ya por las razones anteriores, pero evita el cliente mysql, por lo que aún puede valer la pena.

Tenga en cuenta que todos los métodos presentados aquí dependen de que obtenga sus propios permisos (sistema de archivos o MySQL) correctos. Si se equivoca, lo más probable es que obtenga un falso negativo.

Ladadadada
fuente