Wie kann ich anhand eines Shell-Skripts überprüfen, ob eine Tabelle in der MySQL-Datenbank vorhanden ist oder nicht?


8

Ich versuche, ein Skript zu schreiben, mit dem ein Benutzer auswählen kann, welche Manipulation er an einer Tabelle ausführen muss. Ich möchte überprüfen, ob die Tabelle existiert oder nicht. Wenn es existiert, werde ich die anderen Dinge fortsetzen oder ich beende das Sagen, dass die Tabelle nicht existiert. Wie könnte ich das erreichen?

Antworten:


12
if [ $(mysql -N -s -u root -p -e \
    "select count(*) from information_schema.tables where \
        table_schema='db_name' and table_name='table_name';") -eq 1 ]; then
    do something
else
    echo "table <table_name> does not exist"
    exit 1
fi
  • -N Spaltennamen überspringen
  • -s für nicht tabellarische Ausgabe

2
Damit sich Ihr Skript bei MySQL anmeldet, ohne Sie zu stoppen und zur Eingabe eines Kennworts aufzufordern, können Sie eine .my.cnfDatei in Ihrem Home-Verzeichnis erstellen und einen [client]Block hinzufügen, der Folgendes enthält password="my_password". Schauen Sie sich den Abschnitt über Benutzeroptionsdateien im Handbuch an.
Ladadadada

4

In MySQL können Sie -e aus der Shell verwenden

mysql -e "desc main_db.clients" > /dev/null 2>&1
echo $?

3

Wenn Sie eine Methode wünschen, bei der kein MySQL-Client ausgeführt und beim MySQL-Server angemeldet wird, können Sie Folgendes tun:

if ls -l /var/lib/mysql/database/table.frm 2> /dev/null > /dev/null
then
  echo Table exists
else
  echo Table does not exist
fi

In der ersten Zeile müssen Sie den Pfad zu Ihrem Datenverzeichnis, Ihren Datenbanknamen und Ihren Tabellennamen ersetzen.

Vorsichtsmaßnahmen:

  1. Dies funktioniert nicht, wenn Sie InnoDB verwenden und nicht innodb-file-per-table verwenden. Das Skript kann also sagen, dass die Tabelle nicht vorhanden ist, obwohl dies der Fall ist.
  2. Es ist möglich, dass diese Datei aus verschiedenen Gründen vorhanden ist, z. B. durch Kopieren von Tabellen mithilfe des Dateisystems oder durch Wechseln von MyISAM zu InnoDB. Das Skript kann also sagen, dass die Tabelle vorhanden ist, obwohl dies nicht der Fall ist.

Es ist aus den oben genannten Gründen nicht so zuverlässig wie die anderen Methoden, die bereits vorgestellt wurden, aber es vermeidet den MySQL-Client, sodass es sich möglicherweise immer noch lohnt.

Beachten Sie, dass alle hier vorgestellten Methoden davon abhängen, dass Sie Ihre eigenen Berechtigungen (Dateisystem oder MySQL) korrekt erhalten. Wenn Sie sie falsch verstehen, erhalten Sie höchstwahrscheinlich ein falsches Negativ.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.