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'"
应该可以帮到你。
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/ }'