シェルスクリプトから、MySQLデータベースが存在するかどうかを確認するにはどうすればよいですか?


22

mysqladmin -uroot create foofoo存在する場合は1の終了ステータスを返し、存在しない場合は0を返しますが、データベースが存在しない場合はもちろん作成します。データベースが存在するかどうかを簡単に確認する簡単な方法はありますか?

回答:


42

私はこれがかなり前に回答されたことを理解していますが、これを行う方がはるかにきれいに思えます:

mysql -u root -e 'use mydbname'

データベースが存在する場合、これは出力を生成せず、リターンコード== 0で終了します。

データベース存在しない場合、これはstderrでエラーメッセージを生成し、returncode == 1で終了します。したがって、次のようにします。

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

これはシェルスクリプトでうまく動作し、出力の処理を必要とせず、ローカルファイルシステムへのアクセスに依存しません。


1
エラーメッセージを非表示にする場合は、これを試してください(もちろん、セキュリティのためにパスワードを外すことを検討してください)。mysql -u <ユーザー> -p <pw> -e 'use <db名>' 2> / dev / null; 次に、mysql -u <ユーザー> -p <pw> -e 'CREATE DATABASE <db name>;'; fi
ピーターマーク


7

MySQLのデータベースは、ファイルシステム内のフォルダーです。これにより、データベースが存在するかどうかを簡単に見つけることができます。

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

この場合、/var/libMySQLのdatadirです。このスニペットの良いところは、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

少しハッキーですが、fooが存在しない場合は1、そうでない場合は0が出力されます:

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

2

必要なデータベースがどのシェルでも簡単に機能しているかどうかを確認できると思います

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

$?終了コードを確認します

このコマンドは、特定の資格情報(USERNAMEおよびPASSWORD)を試行して、選択したデータベースにexitすぐに接続します。したがって、接続が正常であれば、終了コードは0になり、そうでない場合はゼロ以外になります。

もちろん、/dev/null必要に応じて出力をリダイレクトできます

PS。この方法は、現在非常に高速で人気のある一時的なストレージの状態を確認するのに非常に便利です。データベースに接続できない場合は、できるだけ早く復元を開始する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.