Frage Wie kann ich anhand eines Shell-Skripts prüfen, ob eine MySQL-Datenbank existiert?


mysqladmin -uroot create foo Gibt einen Exit-Status von 1 if zurück foo existiert, und 0 sonst, aber natürlich wird es auch die Datenbank erstellen, wenn sie nicht bereits existiert. Gibt es eine einfache Möglichkeit, einfach zu prüfen, ob eine Datenbank existiert?


22
2017-08-24 17:10


Ursprung




Antworten:


Ich weiß, dass das 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 existiert, erzeugt dies keine Ausgabe und endet mit Returncode == 0.

Wenn die Datenbank nicht existieren, wird dies eine Fehlermeldung am erscheinen stderr und mit Returncode == 1 beenden. Sie würden also 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 lokalen Dateisystemzugriff angewiesen.


42
2018-04-20 18:56



Für alle, die die Fehlermeldung unterdrücken möchten, versuchen Sie dies (denken Sie natürlich daran, Ihr Passwort aus Sicherheitsgründen herauszunehmen): if! mysql -u <Benutzer> -p <Pw> -e 'benutze <Datenbankname>' 2> / dev / null; dann mysql -u <Benutzer> -p <pw> -e 'CREATE DATABASE <Datenbankname>;'; fi - Peter Mark


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

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


10
2017-08-24 17:16



Vielen Dank. Mit ein paar mehr Befehlszeilenoptionen integriert es sich besser in Shell-Skripte: mysql --batch --skip-column-names -e "SHOW DATABASES LIKE 'foo'" | grep foo. - ithinkihaveacat


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

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

In diesem Fall, /var/lib ist das Datenverzeichnis von MySQL. Das Schöne an diesem Snippet ist, dass kein MySQL-Daemon benötigt wird und auch keine Anmeldeinformationen benötigt werden. Natürlich muss der Benutzer, der den Befehl ausführt, in dieses Verzeichnis absteigen dürfen.


7
2017-08-24 17:49





Von http://www.jbmurphy.com/2011/02/08/quick-check-if-a-mysql-database-exists/ Das ist mehr wie 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

5
2018-03-21 03:32



perfekte Möglichkeit, es zu überprüfen. - Mani


Ein bisschen hacky, aber das wird 1 drucken, wenn foo nicht existiert, sonst:

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

2
2017-08-24 17:31





Ich denke, dass Sie überprüfen können, ob Ihre benötigte Datenbank in einer Shell einfach funktioniert

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

und dann nachsehen $? für den Exit-Code

Dieser Befehl versucht, Ihre spezifischen Anmeldeinformationen (USERNAME und PASSWORD) mit ausgewählten DATABASE und verbinden exit sofort. Also, wenn die Verbindung in Ordnung ist, wird der Exitcode 0 und ansonsten nicht Null sein.

Selbstverständlich können Sie jede Ausgabe an umleiten /dev/null wenn benötigt

PS. Diese Methode ist sehr nützlich, um die Gesundheit der ephemeren Speicher zu überprüfen, die so schnell und beliebt sind. Wenn die Datenbank nicht verbunden werden kann, sollten Sie die Wiederherstellung so bald wie möglich starten.


2
2018-04-06 21:28