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


23

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

Answers:


43

我知道很久以前就已经回答了这个问题,但是这样做对我来说似乎更干净:

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

这在shell脚本中可以很好地运行,不需要对输出进行任何处理,也不依赖于对本地文件系统的访问。


1
对于任何想隐藏错误消息的人,请尝试以下操作(当然,出于安全考虑,请考虑取出密码):if!mysql -u <用户> -p <pw> -e'使用<数据库名称>'2> / dev / null; 然后mysql -u <用户> -p <pw> -e'创建数据库<数据库名称>;'; fi
彼得·马克


7

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

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

在这种情况下,/var/lib是MySQL的datadir。关于此代码段的好处是,它不需要运行MySQL守护程序,也不需要凭据。当然,必须允许运行命令的用户进入该目录。



2

有点hacky,但是如果foo不存在,它将显示1,否则显示0:

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

2

我认为您可以检查所需的数据库是否在任何shell中都以简单的方式工作

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

然后检查 $?退出代码

该命令尝试使用您的特定凭据(USERNAME和PASSWORD)连接到选定的DATABASE和 exit。因此,如果连接正常,则退出代码将为0,否则为非零。

当然,您可以将任何输出重定向到 /dev/null根据需要

PS。这种方法对于检查快速且流行的临时存储的健康非常有用。如果无法连接数据库,则应尽快开始还原。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.