web-dev-qa-db-ja.com

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

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

23
ithinkihaveacat

私はこれがずっと前に答え​​られたことに気づきますが、これを行うことは私にははるかにきれいに思えます:

mysql -u root -e 'use mydbname'

データベースが存在する場合、出力は生成されず、returncode == 0で終了します。

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

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

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

43
larsks

mysql -e "SHOW DATABASES LIKE 'foo'"が役立つはずです。

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

10
Dom

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

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

この場合、 /var/libはMySQLのdatadirです。このスニペットのいいところは、MySQLデーモンを実行する必要がなく、資格情報も必要ないことです。もちろん、コマンドを実行しているユーザーは、そのディレクトリに降りることを許可されている必要があります。

7
Lekensteyn

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
Rob Barreca

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

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

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

このコマンドは、特定の資格情報(USERNAMEおよびPASSWORD)を試行して、選択したDATABASEおよびexitにすぐに接続します。したがって、接続に問題がない場合、exitcodeは0になり、それ以外の場合はゼロ以外になります。

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

PS。この方法は、今日非常に高速で人気のある一時的なストレージの状態をチェックするのに非常に役立ちます。データベースに接続できない場合は、できるだけ早く復元を開始してください。

2
Wile E.

少しハッキーですが、fooが存在しない場合は1を出力し、それ以外の場合は0を出力します。

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