Назад | Перейти на главную страницу

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

mysqladmin -uroot create foo возвращает статус выхода 1, если foo существует, и 0 в противном случае, но, конечно, он также создаст базу данных, если она еще не существует. Есть ли простой способ просто проверить, существует ли база данных?

Я понимаю, что на это был дан ответ давным-давно, но мне кажется, что это намного проще:

mysql -u root -e 'use mydbname'

Если база данных существует, это не приведет к выходу с кодом возврата == 0.

Если база данных не существует, это вызовет сообщение об ошибке stderr и выйдите с кодом возврата == 1. Итак, вы бы сделали что-то вроде этого:

if ! mysql -u root -e 'use mydbname'; then
  ...do stuff to create database...
fi

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

mysql -e "SHOW DATABASES LIKE 'foo'" должен вам помочь.

http://dev.mysql.com/doc/refman/5.1/en/show-databases.html

Базы данных в MySQL - это папки в файловой системе. Это делает чертовски простым определение существования базы данных:

test -d "/var/lib/mysql/databasename"

В таком случае, /var/lib это база данных MySQL. Хорошая особенность этого фрагмента заключается в том, что ему не нужен ни запущенный демон MySQL, ни учетные данные. Конечно, пользователю, выполняющему команду, нужно разрешить спускаться в этот каталог.

Из http://www.jbmurphy.com/2011/02/08/quick-check-if-a-mysql-database-exists/ это больше похоже на то, что я хотел:

DBNAME="dblookingfor"
DBEXISTS=$(mysql --batch --skip-column-names -e "SHOW DATABASES LIKE '"$DBNAME"';" | grep "$DBNAME" > /dev/null; echo "$?")
if [ $DBEXISTS -eq 0 ];then
    echo "A database with the name $DBNAME already exists."
else
    echo " database $DBNAME does not exist."
fi

Немного хакерский, но он напечатает 1, если foo не существует, и 0 в противном случае:

mysqlshow -u root foo 2>&1 >/dev/null | awk ' { print /Unknown database/ }'

Я думаю, вы можете проверить, работает ли ваша необходимая база данных простым способом в любой оболочке

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

а затем проверьте $? для кода выхода

Эта команда пытается использовать ваши учетные данные (ИМЯ ПОЛЬЗОВАТЕЛЯ и ПАРОЛЬ) для подключения к выбранной БАЗЕ ДАННЫХ и exit немедленно. Итак, если соединение в порядке, код выхода будет 0, в противном случае - ненулевое.

Конечно, вы можете перенаправить любой вывод на /dev/null если нужно

PS. Этот метод очень полезен для проверки работоспособности быстродействующих и популярных в наши дни эфемерных хранилищ. Если база данных не может быть подключена, вы должны начать восстановление как можно скорее.