З скрипту оболонки, як я можу перевірити, чи існує база даних MySQL?


23

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

Відповіді:


43

Я усвідомлюю, що на це відповіли давно, але мені здається набагато чистішим:

mysql -u root -e 'use mydbname'

Якщо база даних існує, це не призведе до виводу та виходу із поверненням коду == 0.

Якщо база даних не існує, це створить повідомлення про помилку на stderr та вийде із поверненням коду == 1. Отже, ви зробите щось подібне:

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

Це чудово працює зі скриптами оболонки, не вимагає жодної обробки виводу та не покладається на доступ до локальної файлової системи.


1
Для всіх, хто може захотіти придушити повідомлення про помилку, спробуйте це (звичайно, подумайте про вилучення пароля для безпеки): якщо! mysql -u <user> -p <pw> -e 'використовувати <ім'я db>' 2> / dev / null; тоді mysql -u <user> -p <pw> -e 'СТВОРИТИ ДАНИЙ <db name>;'; fi
Пітер Марк

10

mysql -e "SHOW DATABASES LIKE 'foo'" повинні вам допомогти.

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


5
Спасибі. За допомогою декількох додаткових параметрів командного рядка , вона краще інтегрується в сценарій оболонки: mysql --batch --skip-column-names -e "SHOW DATABASES LIKE 'foo'" | grep foo.
ithinkihaveacat

7

Бази даних у MySQL - це папки у файловій системі. Це робить чорт легко зрозуміти, чи існує база даних:

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

У цьому випадку /var/libє datadir MySQL. Приємно в цьому фрагменті те, що він не потребує запуску демона MySQL, а також не потрібні облікові дані. Звичайно, користувачеві, який виконує команду, слід дозволити спуститися в цей каталог.


6

З 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

ідеальний спосіб перевірити це.
Мані

2

Трохи хакі, але це буде надрукувати 1, якщо foo не існує, 0 інакше:

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

2

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

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

а потім перевірити $?код виходу

Ця команда намагається ваші конкретні облікові дані (USERNAME та PASSWORD) підключитися до обраної DATABASE та exitнегайно. Отже, якщо підключення нормально, вихідний код буде 0, а не нульовим в іншому випадку.

Звичайно, ви можете перенаправити будь-який результат на /dev/nullнеобхідність

PS. Цей метод дуже корисний для перевірки стану ефемерних сховищ, які так швидко і популярні в наші дні. Якщо базу даних неможливо підключити, слід почати відновлення як можна швидше.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.