在建立数据库连接后,有没有可能检查数据库(MySQL)是否存在。
我知道如何检查 DB 中是否存在表,但我需要检查 DB 是否存在。如果不存在,我必须调用另一段代码来创建并填充它。
我知道这听起来有点不太优雅 - 这只是一个快速而简单的应用程序。
在建立数据库连接后,有没有可能检查数据库(MySQL)是否存在。
我知道如何检查 DB 中是否存在表,但我需要检查 DB 是否存在。如果不存在,我必须调用另一段代码来创建并填充它。
我知道这听起来有点不太优雅 - 这只是一个快速而简单的应用程序。
Golang解决方案
创建一个测试包并添加:
import "database/sql"
// testing database creation
func TestCreate(t *testing.T){
Createdb("*Testdb") // This just calls the **sql.DB obect *Testdb
db,err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/*Testdb")
if err != nil{
panic(err)
}
defer db.Close()
_, err = db.Exec("USE *Testdb")
if err != nil{
t.Error("Database not Created")
}
}
以下解决方案对我有效:
mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} \
-s -N -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='${MYSQL_DATABASE}'"
DB_EXISTS=$(mysql -h$DB_HOST -u$DB_USERNAME -p -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='$DB_DATABASE'")
if [[ -z "$DB_EXISTS" ]];
then
echo "DATABASE DOES NOT EXIST"
exit;
else
echo "DOES EXIST"
fi
当您没有足够的权限查看数据库时,使用INFORMATION_SCHEMA
或show databases
是不可靠的。当您无法访问数据库时,它会似乎不存在。然后创建将在此之后失败。另一种更精确的检查方法是使用use命令的输出,尽管我不知道这种方法有多可靠(文本输出在将来版本/其他语言中可能会更改...),所以请注意。
CHECK=$(mysql -sNe "use DB_NAME" 2>&1)
if [ $? -eq 0 ]; then
# database exists and is accessible
elif [ ! -z "$(echo $CHECK | grep 'Unknown database')" ]; then
# database does not exist
elif [ ! -z "$(echo $CHECK | grep 'Access denied')" ]; then
# cannot tell if database exists (not enough permissions)"
else
# unexpected output
fi
mysql -u$USER -p $DB -e ""
if [ $? -eq 0 ]; then
echo "Database $DB exists"
fi