Fehlerbehandlung für MySQL Script

T

Till

Grünschnabel
Hallo Community,
Super Forum hier !! Habe schon viele hilfreiche Threads gefunden :)

Nun zu meiner Frage/Problem:
Ich habe mir ein kleines script gebaut, was mir eine Datenbank erstellt und diese anschließend mit Tabellen befüllt.


Erstellen der Datenbank:
Code:
/usr/bin/mysqladmin create $SQL_DB --user=$SQL_USER --password=$SQL_PW

Erzeugen der Tabellen:
Code:
mysql --user=$SQL_USER --password=$SQL_PW $SQL_DB < /usr/src/sql/structure.sql

Diese beiden machen ihren Job super.
Aber, wenn das script zum 2. Mal läuft, kommt es ja zu einem Fehler, da die Datenbank ja schon besteht!

Wie kann ich denn diesen Fehler abfangen?
Vorher abfragen, ob die Datenbank schon existiert?
Oder am besten den Fehler: "CREATE DATABASE failed; error: 'Can't... auswerten?

Das ist jetzt mein Problem (abfangen)
Wie fang ich den Fehler ab?
Ich bin noch recht frisch was Shell-Programmierung betrifft.
Aber irgendwann muss man ja mal anfangen.

Gruß
Till
 
Ich würde die Existenz der DB zuerst abfragen. Wenn die DB nicht existiert eine neue erstellen.
Code:
#!/bin/bash

if [ !`mysqlshow -u $SQL_USER -p'$SQL_PW' $DB_NAME > /dev/null` ]; then
  echo "DB_CREATE"
else
  echo "!DB_CREATE"
fi
Wahrscheinlich geht das ganze auch noch schöner, aber da ich selbst Neuling im Bereich des Shellscriptings bin, bin ich ja schon froh, daß es funktioniert ... ;)

Bei der Table-Struktur könntest du direkt im SQL-Syntax eine Prüfung einbauen
Code:
CREATE TABLE [COLOR="red"]IF NOT EXISTS[/COLOR] $TABLE_NAME (
  `user_uid` varchar(255) NOT NULL default '',
  `user_pass` varchar(32) NOT NULL default '',
  PRIMARY KEY  (`user_uid`)
) TYPE=MyISAM;
 
Hallo

Ich habe diesen Thread mal hier her geschoben, da es hier mehr um MySQL geht, als um die Shell.

IMHO gibt es aber das SQL-Statement CREATE DATABASE IF NOT EXISTS database;.

Gruß Wolfgang
 
@grey

DANKE!

Hat zuerst nicht so gewollt.
Nachdem ich aber folgendes gemacht habe ging es... fast:
Code:
if [ !`mysqlshow --user=$SQL_USER --password=$SQL_PW $DB_NAME > /dev/null` ]; then
  echo "DB_CREATE"
else
  echo "!DB_CREATE"
fi

Wenn die db schon existiert verzweigt er nicht nach !DB_CREATE....?


@Wolfgang:
Ging schon mehr um die shell.
Ich möchte das innerhalb der Shell lösen damit ich verzweigen kann.
 
Till schrieb:
@grey

DANKE!

Hat zuerst nicht so gewollt.
Nachdem ich aber folgendes gemacht habe ging es... fast:
Code:
if [ !`mysqlshow --user=$SQL_USER --password=$SQL_PW $DB_NAME > /dev/null` ]; then
  echo "DB_CREATE"
else
  echo "!DB_CREATE"
fi

Wenn die db schon existiert verzweigt er nicht nach !DB_CREATE....?
Stimmt ... Schande über mich ... :(
Man sollte doch verschiedene Ausdrücke zum testen nehmen (wieder was gelernt)

Hier die Zeilen, die bei mir funktionieren
Code:
mysqlshow -u $DB_USR -p$DB_PWD $DB_NAM > /dev/null 2>&1
if [ $? -eq 1 ]; then
Ich hab es auch direkt in der if-Anweisung versucht, aber da hab ich es nicht hinbekommen. Egal welche Umleitung von stdout und stderr ich versucht habe. Entweder gab es bei existierender DB einen Fehler und bei nicht existenter DB keinen oder umgekehrt. :think:
 

Ähnliche Themen

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

postfix/dovecot/cyrus sasl: basic conf

JBidWatcher: Problem bei loading Auctions in Verbindung mit mySQL

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Debian squeeze, Webmin, Samba Freigaben

Zurück
Oben