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

mysqladmin -uroot create foo返回1的退出状态(如果foo存在),否则返回0,但是当然如果数据库不存在,它也会创build数据库。 有没有简单的方法来检查数据库是否存在?

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

 mysql -u root -e 'use mydbname' 

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

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

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

这与shell脚本运行良好,不需要任何输出处理,也不依赖本地文件系统访问。

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

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

MySQL中的数据库是文件系统中的文件夹。 这使得它很容易find一个数据库是否存在:

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

在这种情况下, /var/lib是MySQL的数据目录。 这段代码的好处在于它不需要运行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 

我想你可以检查你的数据库是否以简单的方式在任何shell中工作

 mysql -uUSERNAME -pPASSWORD DATABASE -e exit 

然后检查$? 退出代码

此命令会尝试您的特定凭据(USERNAME和PASSWORD)连接到选定的DATABASE并立即exit 。 所以,如果连接是OK的exitcode将是0,否则非零。

当然,如果需要,可以将任何输出redirect到/dev/null

PS。 这种方法是非常有用的检查短暂的存储是如此快速和stream行我们的日子的健康。 如果数据库无法连接,则应尽快开始恢复。

有点古怪,但是如果foo不存在,这将打印1,否则为0:

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