Jump to content
InvisionCommunity.de - Der Deutsche Invision Community Support
Sign in to follow this  
brightpower

Mysql Datenbank Ausfall

Recommended Posts

Hallo mein Provider rüstet derzeit auf und da fällt hier und da mal die Datenbank kurzfristig aus.

Kann man das irgendwie abfangen damit nicht die Hieroglyphische Mysql Fehler meldung kommt sondern einen eigene Seite mit dem Hinweis auf den Datenbankausfall.

Thx

Share this post


Link to post

Ja, kannst das Forum abschalten. Da kann man dann auch nen Grund angeben wieso's abgeschalten ist.

Extra wegen einem kleinen Datenbankausfall jetzt rumprogrammieren lohnt sich wohl ned ...

BLACK

PS: Vielleicht sieht Stefan das anders, und weiß nen schnellen workaround ? :P

Share this post


Link to post

Ich habe jetzt leider grade nicht soviel Zeit um das Ausführlich zu testen aber an und für sich müsste das gehen:

Datei ./sources/Drivers/mySQL.php

suche:

    /*========================================================================*/

    // Basic error handler

    /*========================================================================*/

   

    function fatal_error($the_error) {

    global $INFO;

Jetzt probier folgendes aus (weiß grade nicht, ob das Board bei einem Fehler zu diesem Zeitpunkt schon einen header gesendet hat...)

Füge darunter den blauen Code ein:

    /*========================================================================*/

    // Basic error handler

    /*========================================================================*/

   

    function fatal_error($the_error) {

    global $INFO;

    // MySQL Fehlerausgabe überschreiben start

    header("location: http://www.deine-domain.de/mysqlfehler.htm");

    exit;

    // MySQL Fehlerausgabe überschreiben ende

http://www.deine-domain.de/mysqlfehler.htm musst du natürlich durch die URL zu einer Fehlerseite ersetzen.

sollte das nicht funktionieren zwei Alternativen:

1.

    /*========================================================================*/

    // Basic error handler

    /*========================================================================*/

   

    function fatal_error($the_error) {

    global $INFO;

    // MySQL Fehlerausgabe überschreiben start

    echo "Hier einen einfachen Fehlertext nach deinen Wünschen eintragen. HTML kannst du hier benutzen.";

    exit;

    // MySQL Fehlerausgabe überschreiben ende

oder wenn alle Stricke reißen:

2.

Suche nach:

   	 $out = "<html><head><title>Invision Power Board Database Error</title>

         <style>P,BODY{ font-family:arial,sans-serif; font-size:11px; }</style></head><body>

         &nbsp;<br><br><blockquote><b>There appears to be an error with the {$INFO['board_name']} database.</b><br>

         You can try to refresh the page by clicking <a href=\"javascript:window.location=window.location;\">here</a>, if this

         does not fix the error, you can contact the board administrator by clicking <a href='mailto:{$INFO['email_in']}?subject=SQL+Error'>here</a>

         <br><br><b>Error Returned</b><br>

         <form name='mysql'><textarea rows=\"15\" cols=\"60\">".htmlspecialchars($the_error)."</textarea></form><br>We apologise for any inconvenience</blockquote></body></html>";

Überschreibe den Teil nach $out =" mit einem beliebigem Text deiner Wahl.

Edited by Modula

Share this post


Link to post

Es kommt in meinen Augen darauf an, ob das ein kurzer Ausfall ist, der zeitlich festgelegt ist oder es im laufenden Betrieb hin und wieder zu kleinen Aussetzern kommt. ;)

Des Weiteren kommt es auch bei der Abschaltung des Board zu einer SQL Fehlermeldung, wenn die Verbindung zur Datenbank nicht zustande kommt. ;)

Als Workaround würde ich folgendes vorschlagen.

Zunächst, damit auch bei fehlgeschlagender Datenbankverbindung die Funktion für SQL Fehler aufgerufen wird, muß in der mySQL.php (sources/Drivers) aus

        if ( !mysql_select_db($this->obj['sql_database'], $this->connection_id) )
       {
           echo ("ERROR: Cannot find database ".$this->obj['sql_database']);
       }
folgendes gemacht werden
        if ( !mysql_select_db($this->obj['sql_database'], $this->connection_id) )
       {
           //echo ("ERROR: Cannot find database ".$this->obj['sql_database']);
          $this->fatal_error("");
       }
Nun die gewünschte Ausgabe in der Funktion fatal_error() einbinden. Suche dazu folgende Stelle
   	 $out = "<html><head><title>Invision Power Board Database Error</title>
        <style>P,BODY{ font-family:arial,sans-serif; font-size:11px; }</style></head><body>
        &nbsp;<br><br><blockquote><b>There appears to be an error with the {$INFO['board_name']} database.</b><br>
        You can try to refresh the page by clicking <a href=\"javascript:window.location=window.location;\">here</a>, if this
        does not fix the error, you can contact the board administrator by clicking <a href='mailto:{$INFO['email_in']}?subject=SQL+Error'>here</a>
        <br><br><b>Error Returned</b><br>
        <form name='mysql'><textarea rows=\"15\" cols=\"60\">".htmlspecialchars($the_error)."</textarea></form><br>We apologise for any inconvenience</blockquote></body></html>";
     
Kommentiere sie aus und füge deine eigene HTML Seite ein.
   	 //$out = "<html><head><title>Invision Power Board Database Error</title>
        <style>P,BODY{ font-family:arial,sans-serif; font-size:11px; }</style></head><body>
        &nbsp;<br><br><blockquote><b>There appears to be an error with the {$INFO['board_name']} database.</b><br>
        You can try to refresh the page by clicking <a href=\"javascript:window.location=window.location;\">here</a>, if this
        does not fix the error, you can contact the board administrator by clicking <a href='mailto:{$INFO['email_in']}?subject=SQL+Error'>here</a>
        <br><br><b>Error Returned</b><br>
        <form name='mysql'><textarea rows=\"15\" cols=\"60\">".htmlspecialchars($the_error)."</textarea></form><br>We apologise for any inconvenience</blockquote></body></html>";

$out = "EIGENER HTML CODE";
     

Als Tipp, innerhalb deines HTML Code auf Anführungszeichen verzichten und nur einfache Hochkommas verwenden. Ansonsten bekommst du Probleme mit dem PHP Interpreter. :)

Nachtrag: Wie Modula vorgschlagen gat, geht es natürlich auch. Jedoch muß du, wie beschrieben in der Funktion connect() die Änderung vornehmen, damit du überhaupt erstmal in die Fehlerfunktion kommt, wenn du keine Verbindung zur Datenbank hast. ;)

Share this post


Link to post

*dreht sich zu Frog um und schaut ihn fragend an*

Ist die connect() Funktion im Plus auch schon entsprechend bearbeitet? ;)

*zu Stefan zurückdreht*

Danke für den wertvollen Hinweis, die connect() Funktion hatte mir auch schon Kopfschmerzen gemacht. Manchmal liegt des Bretsels Lösung wirklich direkt vor uns...

Wäre eigentlich fast noch eine Idee für einen kleinen MiniMod (über AdminPanel eigener Text mittels Textbox festlegbar?) *nachdenklich schaut*

Edited by GreyCrow

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×