Seitenanfang

Unerklärliche mySQL "Unknown database" Fehlermeldungen

Dieser Post wurde aus meiner alten WordPress-Installation importiert. Sollte es Darstellungsprobleme, falsche Links oder fehlende Bilder geben, bitte einfach hier einen Kommentar hinterlassen. Danke.


"Never change a running system" ist einer der Pfeiler, auf denen die IT-Welt erbaut ist. Jeder der schon einmal mit einem Computer zu tun hatte weiß, dass sich dieser Grundsatz nicht immer befolgen lässt, so auch heute Morgen.

[caption id="attachment_492" align="alignright" width="300" caption="by Bruce Marlin"][/caption]

Eine Datenbank umzubenennen ist eigentlich ganz einfach, schwieriger wird es nur, wenn sie von tausenden Zeilen Sourcecode benutzt wird. Ja, man sollte besser die Finger davon lassen und mit dem "falschen" oder "alten" Namen leben, aber manchmal ist das einfach nicht möglich. In einer koordinierten Aktion führte eine Gruppe Perl-Entwickler und Systemadministratoren heute Morgen eine solche Aktion durch. Alles war vorher getestet worden, Probleme waren also nicht zu erwarten.

Allerdings gibt es nach da noch den Klabautermann der IT: Murphy! Er hat natürlich auch heute zugeschlagen, denn schließlich gilt: Alles, was schief gehen kann, wird auch schief gehen und so produzierte das umbenannte Live-System unerklärliche Fehlermeldungen die auf dem Testsystem (das bereits einige Tage zuvor umgestellt wurde um Fehlerquellen zu finden) nicht auftraten.

Solche Fehler sind mir am liebsten, naja, nicht ernsthaft, denn ich arbeite lieber in einer Testumgebung in der ich nicht viel kaputt machen kann, als auf einem lebenden, atmenden Live-System auf dem sich auch normale Menschen und nicht nur Entwickler aufhalten. Egal, man kann sich Fehler nicht aussuchen.

Die Fehlermeldung war genau so simpel wie verwirrend:  DBD::mysql::st execute failed: Unknown database 'alter_datenbankname' at... Eindeutig, oder? Auch der Fehlercode 1049 bestätigte die Meldung und so ein Fehler sollte sich schnell beheben lassen, denn schließlich muss nur der alte durch den neuen Datenbanknamen ersetzt werden.

Einziges Problem bei der Sache: Der Datenbankname wird nur beim DBI->connect, also dem Verbindungsaufbau zur Datenbank, festgelegt, später gibt es keine "use"-Befehle noch datenbankübergreifende Operationen. Vor der fraglichen, den Fehler produzierenden INSERT INTO - Zeile wurden sogar andere Queries - auch schreibende - abgesetzt, warum trat der Fehler also nur bei drei verschiedenen, aber eigentlich zusammenhanglosen Queries auf und nicht bei den anderen?

Sobald jeder seine Umstellungsaufgaben abgearbeitet hatte, fand er sich in einer großen Telefonkonferenz ein, um bei der Problemlösung zu helfen. Bald fanden wir heraus, dass die fraglichen INSERT INTO-Queries nicht nur die mysteriösen falschen "Unknown database" - Fehlermeldungen produzierten, sondern gleichzeitig in der neuen Datenbank problemlos ausgeführt wurden, denn die eingefügten Zeilen waren zweifelsfrei vorhanden.

Erst als einer der Sysadmins das INSERT-Query direkt auf dem mySQL-Server ausführte, kam ein klein wenig Licht in die Sache: Der INSERT wurde ausgeführt, der Datensatz landete in der Tabelle, aber die Fehlermeldung kam trotzdem. Wir hatten an alles gedacht, bis auf eine Kleinigkeit: Unsere Datenbanken arbeiten ganz klassisch, neumodisches Zeugs wie serverseitige Operationen (gibt es erst seit gefühlten 30 Jahren gibt in der ganzen Datenbank nicht. In der ganzen Datenbank? Nein, ein kleines Dorf leistet Widerstand ein einziger Anwendungsfall hat tatsächlich ein paar Trigger: Automatische Funktionen, die nach einem INSERT einige wenige Befehle ausführen um eine andere Tabelle zu aktualisieren.

Das eigentliche Problem entstand in den ursprünglich erstellten Triggerdefinitionen, denn diese adressierten explizit den alten Datenbanknamen, denn dieser ändert sich bestimmt nie...

Schade nur, das mySQL keine vernünftigen Fehlermeldungen produzieren kann. Der kleine Zusatz "in trigger XYZ" hätte uns zwei Stunden Sucherei, Entwicklerstunden eines ganzen Teams und Downtime erspart.

Theoretisch sind wir jetzt schlauer, in der Praxis bringt uns das nichts, denn sind alle Datenbanknamen so wie sie sein sollen. Vorerst zumindest...

 

Noch keine Kommentare. Schreib was dazu

Schreib was dazu

Die folgenden HTML-Tags sind erlaubt:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>