mysqladmin -uroot create foo
は、foo
が存在する場合は1の終了ステータスを返し、それ以外の場合は0を返しますが、データベースがまだ存在しない場合はもちろんデータベースも作成します。データベースが存在するかどうかを簡単に確認する簡単な方法はありますか?
私はこれがずっと前に答えられたことに気づきますが、これを行うことは私にははるかにきれいに思えます:
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
これはシェルスクリプトでうまく動作し、出力の処理を必要とせず、ローカルファイルシステムへのアクセスに依存していません。
mysql -e "SHOW DATABASES LIKE 'foo'"
が役立つはずです。
MySQLのデータベースは、ファイルシステム内のフォルダーです。これにより、データベースが存在するかどうかを簡単に見つけることができます。
test -d "/var/lib/mysql/databasename"
この場合、 /var/lib
はMySQLのdatadirです。このスニペットのいいところは、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
必要なデータベースがシェルで簡単に機能するかどうかを確認できると思います
mysql -uUSERNAME -pPASSWORD DATABASE -e exit
そして$?
で終了コードを確認します
このコマンドは、特定の資格情報(USERNAMEおよびPASSWORD)を試行して、選択したDATABASEおよびexit
にすぐに接続します。したがって、接続に問題がない場合、exitcodeは0になり、それ以外の場合はゼロ以外になります。
もちろん、必要に応じて、出力を/dev/null
にリダイレクトできます
PS。この方法は、今日非常に高速で人気のある一時的なストレージの状態をチェックするのに非常に役立ちます。データベースに接続できない場合は、できるだけ早く復元を開始してください。
少しハッキーですが、fooが存在しない場合は1を出力し、それ以外の場合は0を出力します。
mysqlshow -u root foo 2>&1 >/dev/null | awk ' { print /Unknown database/ }'