Wie kann ich mithilfe eines Shellskripts prüfen, ob eine Tabelle in der MySQL-Datenbank vorhanden ist oder nicht?

Wie kann ich mithilfe eines Shellskripts prüfen, ob eine Tabelle in der MySQL-Datenbank vorhanden ist oder nicht?

Ich versuche, ein Skript zu schreiben, mit dem ein Benutzer auswählen kann, welche Manipulation er an einer Tabelle vornehmen muss. Ich möchte prüfen, ob die Tabelle existiert oder nicht. Wenn sie existiert, führe ich die anderen Dinge aus, andernfalls beende ich das Programm mit der Meldung, dass die Tabelle nicht existiert. Wie kann ich das erreichen?

Antwort1

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
  • -Num Spaltennamen zu überspringen
  • -sfür nicht tabellarische Ausgabe

Antwort2

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

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

Antwort3

Wenn Sie eine Methode wünschen, bei der kein MySQL-Client ausgeführt und keine Anmeldung beim MySQL-Server erforderlich ist, 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

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

Vorbehalte:

  1. Dies funktioniert nicht, wenn Sie InnoDB verwenden undnichtmithilfe von „innodb-file-per-table“. Das Skript kann also sagen, dass die Tabelle nicht existiert, obwohl sie es tut.
  2. Es ist möglich, dass diese Datei aus verschiedenen Gründen existiert, z. B. weil Tabellen mithilfe des Dateisystems kopiert werden oder weil von MyISAM zu InnoDB gewechselt wird. Das Skript kann z. B. angeben, dass die Tabelle existiert, obwohl dies nicht der Fall ist.

Aus den oben genannten Gründen ist es nicht so zuverlässig wie die anderen bereits vorgestellten Methoden, vermeidet jedoch den MySQL-Client und kann sich daher dennoch lohnen.

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

verwandte Informationen