Как с помощью скрипта оболочки проверить, существует ли таблица в базе данных MySQL?

Как с помощью скрипта оболочки проверить, существует ли таблица в базе данных MySQL?

Я пытаюсь написать скрипт, который позволяет пользователю выбирать, какие манипуляции ему нужно выполнить со столом. Я хочу проверить, существует ли таблица или нет. Если она существует, я продолжу другие вещи, иначе я выйду, сказав, что таблица не существует. Как я могу этого добиться.

решение1

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для пропуска имен столбцов
  • -sдля нетабличного вывода

решение2

В MySQL вы можете использовать -e из оболочки

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

решение3

Если вам нужен метод, не требующий запуска клиента MySQL и входа на сервер MySQL, вы можете сделать следующее:

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

Вам придется заменить путь к каталогу данных, имя базы данных и имя таблицы в первой строке.

Предостережения:

  1. Это не сработает, если вы используете InnoDB инетс использованием innodb-file-per-table. т.е. скрипт может сказать, что таблица не существует, даже если она существует.
  2. Этот файл может существовать по разным причинам, включая копирование таблиц с использованием файловой системы или переключение с MyISAM на InnoDB. То есть скрипт может сказать, что таблица существует, даже если это не так.

По указанным выше причинам он не так надежен, как другие представленные методы, но он позволяет избежать использования клиента MySQL, поэтому его все равно можно использовать.

Обратите внимание, что все представленные здесь методы основаны на том, что вы правильно настроили свои собственные разрешения (файловая система или MySQL). Если вы сделаете их неправильно, вы, скорее всего, получите ложный отрицательный результат.

Связанный контент