Wie kann ich anhand eines Shell-Skripts überprüfen, ob eine MySQL-Datenbank vorhanden ist?

22

mysqladmin -uroot create fooGibt einen Exit-Status von 1 zurück, falls foovorhanden, und 0, falls noch nicht vorhanden, wird natürlich auch die Datenbank erstellt. Gibt es eine einfache Möglichkeit, einfach zu überprüfen, ob eine Datenbank vorhanden ist?

ithinkihaveacat
quelle

Antworten:

42

Mir ist klar, dass dies vor langer Zeit beantwortet wurde, aber es scheint mir viel sauberer zu sein, dies zu tun:

mysql -u root -e 'use mydbname'

Wenn die Datenbank vorhanden ist, wird keine Ausgabe erstellt und mit dem Rückkehrcode == 0 beendet.

Wenn die Datenbank nicht existiert, wird dies eine Fehlermeldung auf stderr erzeugen und mit returncode == 1 beendet. Also würden Sie so etwas tun:

if ! mysql -u root -e 'use mydbname'; then
  ...do stuff to create database...
fi

Dies funktioniert gut mit Shell-Skripten, erfordert keine Verarbeitung der Ausgabe und ist nicht auf den Zugriff auf das lokale Dateisystem angewiesen.

larsks
quelle
1
Wenn Sie die Fehlermeldung unterdrücken möchten, versuchen Sie Folgendes (natürlich sollten Sie Ihr Passwort aus Sicherheitsgründen herausnehmen): if! mysql -u <benutzer> -p <pw> -e 'benutze <db name>' 2> / dev / null; dann mysql -u <user> -p <pw> -e 'CREATE DATABASE <Datenbankname>;'; fi
Peter Mark
10

mysql -e "SHOW DATABASES LIKE 'foo'" sollte dir helfen.

http://dev.mysql.com/doc/refman/5.1/de/show-databases.html

Dom
quelle
5
Vielen Dank. Mit ein paar mehr Befehlszeilenoptionen integriert es besser in Shell - Scripts: mysql --batch --skip-column-names -e "SHOW DATABASES LIKE 'foo'" | grep foo.
Ithinkihaveacat
7

Datenbanken in MySQL sind Ordner im Dateisystem. Das macht es verdammt einfach herauszufinden, ob eine Datenbank existiert:

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

In diesem Fall /var/libist der Datadir von MySQL. Das Schöne an diesem Snippet ist, dass kein MySQL-Daemon ausgeführt werden muss und keine Anmeldeinformationen erforderlich sind. Natürlich muss der Benutzer, der den Befehl ausführt, berechtigt sein, in dieses Verzeichnis zu gelangen.

Lekensteyn
quelle
6

Von http://www.jbmurphy.com/2011/02/08/quick-check-if-a-mysql-database-exists/ entspricht dies eher dem, was ich wollte:

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
Rob Barreca
quelle
perfekte Möglichkeit, um es zu überprüfen.
Mani
2

Ein bisschen hacky, aber das gibt 1 aus, wenn foo nicht existiert, sonst 0:

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

Ich denke, Sie können in jeder Shell überprüfen, ob Ihre benötigte Datenbank auf einfache Weise funktioniert

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

und dann $?auf Exit-Code prüfen

Mit diesem Befehl wird versucht, mit Ihren spezifischen Anmeldeinformationen (USERNAME und PASSWORD) exitsofort eine Verbindung zu der ausgewählten DATABASE herzustellen . Wenn die Verbindung in Ordnung ist, ist der Exitcode 0, andernfalls ungleich Null.

Natürlich können Sie jede Ausgabe /dev/nullbei Bedarf umleiten

PS. Diese Methode ist sehr nützlich, um die Gesundheit von kurzlebigen Speichern zu überprüfen, die heutzutage so schnell und beliebt sind. Wenn keine Verbindung zur Datenbank hergestellt werden kann, sollten Sie die Wiederherstellung so schnell wie möglich starten.

Wile E.
quelle