Mysql : lost connection ? (Help)



  • Hallo LEute

    Ich nutze in meinem Projekt seit längerem den Mysql - Wrapper
    von Unix Tom .
    Funktioniert einwandfrei (in mindesten 10 Programmabschnitten)

    Jetzt habe ich ein einer Stelle das Problem, dass eine Abfrage das
    Ergebnis :" Lost Connection to Mysql Server during query" zurückgibt.
    Diese Antwort erhalte ich jedoch erst nach ca 40 Sekunden (ein Ewigkeit)

    Die Abfrage ist wie folgt aufgebaut:

    SELECT * FROM dbase_1,dbase_2 WHERE dbase_1.nr1=dbase_2.nr2 ORDER BY dbase_2.name
    

    führe ich diese Abfrage unter PhpMyAdmin aus so erhalte ich das Ergebnis
    nach ca 2 Sekunden.
    In meiner Anwendung bekomme ich o.g. Fehlermeldung bei 3 von 4 Anfragen.
    Also jede 4. Anfrage kommt erfolgreich zurück.

    Die Abfrage :

    bool CHSVereinDlg::db_execute(CString befehl)
    {
    MessageBox(befehl);
    	m_DlgLog->WriteToLog("SQL: "+befehl);
    
    	switch (m_database.sqlexecute(befehl)) 
    	{ 
    	case DB_COMMAND_ERROR: 
    		MessageBox(m_database.errorMessage());
    		return false; 
    
    	case DB_COMMAND_OK: 
    		MessageBox("comamnd ok");
    		break;
    		//		return false; 
    	case DB_EMPTY_QUERY: 
    		MessageBox("empty");
    		return false;
    
    	case DB_SELECT_OK: 
    		MessageBox("OK");
    		break; 
    	} 
    	return TRUE;
    
    }
    

    Kann ich diese Lost connection umgehen oder vorher abfangen ?
    40 Sekunden sind eine laaaange Zeit 🙄

    Danke und Gruß
    Linus



  • 😕 😕 😕

    Ich weis wirklich nicht mehr weiter

    Jetzt funktionieren alle Datenbank-aufrufe nur noch gelegentlich

    Die Mysql Datenbank wird auf einem Webserver vor Ort betrieben .
    In diesem Netz bzw auch Teilnetz funktioniert alles ganz normal wie
    vorher auch von außerhalb.
    Doch wenn ich von beliebigen Rechnern von außen darauf zugreifen möchte
    geht das zu 80% schief.

    Jedesmal kommt die Meldung: "Command Error"
    Dabei ist der Befehl korrekt (Funktioniert ja auf anderen Rechnern)

    Ich weis nich wo ich den Fehler suchen soll
    😕 Timeout 😕 geänderte Syntax 😕

    btw. : Serverdaten : Windos 2000 Server sp4 + IIS + Mysql 5.0

    Ich schreibe seit einem Jahr an dem Programm und es sollte nächste
    Woche Mittwoch vorgeführt werden
    😡 und jetzt das 😡

    Wäre wirklich heilfroh wenn jemand eine Idee hätte

    Danke und Gruß
    Linus



  • Gleich vorweg: eine Lösung habe ich auch nicht und mit MySQL hatte ich auch noch nix zu tun.

    Aber:
    ich hatte mal eine Oracle-Datenbank, die ein ähnliches Verhalten zeigte. Konnte unser Datenbank-Experte lösen, indem die Datenbank komplett neu aufgesetz wurde. Dann funktionierte es wieder eine Zeit lang. Das Problem war aber nicht weg. Wenn ich mich richtig erinnere lag der Fehler daran, dass die Datenbank in irgendeinem Default-Pfad installiert war, der im System-Tablespace lief. Daraufhin wurde ein extra Datenbank-Benutzer im eigenen Tablespace mit unbegrenztem Tablespace angelegt und darin die Datenbank installiert. Dann ging es.

    Und:
    wenn es im internen Netzwerk funktioniert aber von ausserhalb nicht, hätte ich zuersteinmal die Verbindung von aussen in Verdacht, ob es da zu Ausfällen oder Engpässen kommen kann. Oder zickt da irgendeine unbekannte Protokollfunktion rum, deren Speicher voll ist... Hatte ich auch schon bei Internetverbindungen. Das war dann eine 4GB grosse Log-Datei, die die Festplatte zumüllte und das System dann nur noch mit Auslagern beschäftigt war.

    Und:
    eine Abfrage stürzte bei mir ab, weil sie so komplex war. Dafür brauchte die Datenbank einfach länger. Da wurde dann aus dem Programm heraus mit dem Holzhammer einfach die Zugriffszeit erhöht:
    SetQueryTimeout(240); // 4 Minuten
    Nicht sehr schön, aber hat funktioniert...

    Und noch was ganz doofes:
    ein kaputtes Switch hat hier mal gelegentlich einzelne Bits umgelegt, wenn man das Programm über das Netzwerk zum Server geschickt hat, um es zu brennen. Da wurde dann im Programm aus einem String "SELECT" auf dem Entwicklungsrechner ein "SELEDT" auf der Programm-CD. Unschön, aber nur von wegen "auf dem anderen Rechner gehts ja schliesslich auch"...

    Vielleicht ist ja was dabei, was dir irgendwie weiter hilft...



  • Du solltest mal schauen ob eine anfrage von außen auch solange dauert.
    Verwende dazu den Client mysql.
    Ein Timeout wird immer vom RDBMS selbst durchgeführt oder von einem Socket.
    Bei der libmysql.dll werden ja auch sockets verwendet.
    Es liegt aber sicher nicht an der lib.
    Es könnte sein das es ein Netzwerkproblem gibt und z.B. der Server nicht weiß wo er die Packete hinsenden soll.
    Sowas hatte ich schon mal.



  • Vielen Dank für die Antworten.

    Ich steh vor einem Rätsel .
    Nachdem ich alles noch einmal durchgeschaut hatte und von verschiedenen
    Rechnern (Freunden) es vergeblich versucht hatte,
    funktioniert es auf einmal wieder.

    😕

    Ich habe nichts geändert, und weis jetzt nicht warum es wieder funktioniert!
    Das ist ja schlimmer als wenn es überhaupt nicht geht , denn dann kann man
    den Fehler suchen , finden und man ist zufrieden . Aber so....

    😕

    Kann die Ursache außerhalb der Rechner liegen ? (Telefonleitung)

    Ich habe jetzt schon Angst vor der Vorführung .

    aber trotzdem Danke für Eure Hilfe.
    Gruß Linus


Anmelden zum Antworten