Is it possible from within a bash script to check if a mysql database exists. Depending on the result then perform another action or terminate the script?
A simple way to check if a database exists is: SHOW DATABASES LIKE 'dbname'; If database with the name 'dbname' doesn't exist, you get an empty set. If it does exist, you get one row.
To test whether a row exists in a MySQL table or not, use exists condition. The exists condition can be used with subquery. It returns true when row exists in the table, otherwise false is returned. True is represented in the form of 1 and false is represented as 0.
mysql> use test Database changed mysql> SELECT DATABASE() FROM DUAL; The following is the output. mysql> show databases; Here is the output that displays all the databases.
In creating a database you also need to check whether or not the database already exists. In order to do so, simply use the 'if exists' method and select the name of the database from sysdatabases.
I give +1 to answer by @chown, but here's another alternative: If the bash script is running locally with the MySQL instance, and you know the path to the datadir, you can test:
if [ -d /var/lib/mysql/databasename ] ; then # Do Stuff ... fi
This also assumes your shell user running the script has filesystem-level privileges to read the contents of the MySQL datadir. This is often the case, but it is not certain.
Example script (Thanks to Bill Karwin for the --user
and --password
comment!):
#!/bin/bash ## --user=XXXXXX --password=XXXXXX *may* not be necessary if run as root or you have unsecured DBs but ## using them makes this script a lot more portable. Thanks @billkarwin RESULT=`mysqlshow --user=XXXXXX --password=XXXXXX myDatabase| grep -v Wildcard | grep -o myDatabase` if [ "$RESULT" == "myDatabase" ]; then echo YES fi
These are what the commands look like when run at a prompt:
[root@host ~]# mysqlshow myDatabase Wildcard: myDatabase +------------------+ | Databases | +------------------+ | myDatabase | +------------------+
If no DB exists, the output will look like this:
[root@host ~]# mysqlshow myDatabase Wildcard: myDatabase +-----------+ | Databases | +-----------+ +-----------+
Then, parse the output and do what you need to based on if it exists or not!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With