从 shell 脚本中,如何检查 MySQL 数据库是否存在?

ith*_*cat 26 mysql shell bash database

mysqladmin -uroot create foo如果foo存在,则返回退出状态 1 ,否则返回0,当然,如果数据库不存在,它也会创建数据库。是否有一些简单的方法可以简单地检查数据库是否存在?

lar*_*sks 49

我意识到这是很久以前的回答,但对我来说这样做似乎更干净:

mysql -u root -e 'use mydbname'
Run Code Online (Sandbox Code Playgroud)

如果数据库存在,这将不会产生任何输出并以返回码 == 0 退出。

如果数据库存在,这将在stderr上产生一条错误消息并以 returncode == 1 退出。 所以你会做这样的事情:

if ! mysql -u root -e 'use mydbname'; then
  ...do stuff to create database...
fi
Run Code Online (Sandbox Code Playgroud)

这可以很好地与 shell 脚本一起使用,不需要对输出进行任何处理,并且不依赖于具有本地文件系统访问权限。


Dom*_*Dom 11

mysql -e "SHOW DATABASES LIKE 'foo'" 应该可以帮助你。

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

  • 谢谢。通过更多的命令行选项,它可以更好地集成到 shell 脚本中:`mysql --batch --skip-column-names -e "SHOW DATABASES LIKE 'foo'" | grep foo`。 (5认同)

Lek*_*eyn 7

MySQL 中的数据库是文件系统中的文件夹。这使得查找数据库是否存在变得非常容易:

test -d "/var/lib/mysql/databasename"
Run Code Online (Sandbox Code Playgroud)

在本例中,/var/lib是 MySQL 的 datadir。这个片段的好处是它不需要运行 MySQL 守护程序,也不需要凭据。当然,必须允许运行该命令的用户进入该目录。


小智 7

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
Run Code Online (Sandbox Code Playgroud)