Do +1 alla risposta di @chown, ma ecco un'altra alternativa:se lo script bash è in esecuzione localmente con l'istanza MySQL e conosci il percorso del datadir, puoi testare:
if [ -d /var/lib/mysql/databasename ] ; then
# Do Stuff ...
fi
Ciò presuppone anche che l'utente della shell che esegue lo script disponga dei privilegi a livello di filesystem per leggere il contenuto del datadir MySQL. Questo è spesso il caso, ma non è certo.
mysqlshow "test" > /dev/null 2>&1 && echo "Database exists."
A seconda dello stato di uscita del comando mysqlshow, eseguirà il seguente echo.
Script di esempio (Grazie a Bill Karwin per il --user
e --password
commenta!):
#!/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
Ecco come appaiono i comandi quando vengono eseguiti al prompt:
[[email protected] ~]# mysqlshow myDatabase
Wildcard: myDatabase
+------------------+
| Databases |
+------------------+
| myDatabase |
+------------------+
Se non esiste alcun DB, l'output sarà simile a questo:
[[email protected] ~]# mysqlshow myDatabase
Wildcard: myDatabase
+-----------+
| Databases |
+-----------+
+-----------+
Quindi, analizza l'output e fai ciò di cui hai bisogno in base alla sua esistenza o meno!