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

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

Estoy intentando escribir un script que permita al usuario seleccionar qué manipulación necesita realizar en una mesa. Quiero comprobar si la tabla existe o no. Si existe continuaré con las demás cosas o salgo diciendo que la tabla no existe. ¿Cómo podría lograr esto?

Respuesta1

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 omitir nombres de columnas
  • -spara salida no tabular

Respuesta2

En MySQL puedes usar -e desde el shell

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

Respuesta3

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 nonousando 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 sea así.

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 usted obtenga sus propios permisos (sistema de archivos o MySQL) correctos. Si se equivoca, lo más probable es que obtenga un falso negativo.

información relacionada