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

У меня нет неопровержимых фактов об этом, но это верно, что поддержка сохранения к SharePoint значительно увеличена при использовании Office, чтобы сделать это по сравнению с любым другим приложением. Office устанавливает с дополнительным компонентом (обычно называемый 'поддержка Windows SharePoint Services'), который помещает элементы управления ActiveX для введения опыта в Internet Explorer и вероятно другие вещи также.

Другие приложения просто не имеют этого. Почему стандартный WebDAV так проблематичен однако, я не знаю.

22
задан 24 August 2010 в 20:10
6 ответов

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

mysql -u root -e 'use mydbname'

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

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

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

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

42
ответ дан 28 November 2019 в 20:21

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

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

10
ответ дан 28 November 2019 в 20:21
  • 1
    Спасибо. Еще с несколькими параметрами командной строки это интегрируется лучше в сценарии оболочки: mysql --batch --skip-column-names -e "SHOW DATABASES LIKE 'foo'" | grep foo. –  ithinkihaveacat 29 August 2010 в 13:49

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

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

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

7
ответ дан 28 November 2019 в 20:21

Немного hacky, но это распечатает 1, если нечто не будет существовать, 0 иначе:

mysqlshow -u root foo 2>&1 >/dev/null | awk ' { print /Unknown database/ }'
2
ответ дан 28 November 2019 в 20:21

Из 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
6
ответ дан 28 November 2019 в 20:21

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

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

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

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

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

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

2
ответ дан 28 November 2019 в 20:21

Теги

Похожие вопросы