Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySQL Fehler 2006: Server has gone away (https://www.delphipraxis.net/129862-mysql-fehler-2006-server-has-gone-away.html)

Captnemo 26. Feb 2009 21:39

Datenbank: MySQL • Version: 5.0 • Zugriff über: Zeos

MySQL Fehler 2006: Server has gone away
 
Hallo Leute,

ich habe das Problem, dass zwei Programme von mir welche zu einem Projekt gehören, nach eine gewissen Laufzeit den Fehler: "MySQL Error: Server has gone away" melden. Die Laufzeit ist unterschiedlich.

Wobei der Fehler sicherlich nicht unbedingt an meinen Programmen liegt.
Erst einmal das Szenario:

Eine XP-Workstation (dient in diesem Fall zur Zeit als Server) dient als MySQL-Server. Diese Workstation steht in der Zentrale und ist per Kabel-Deutschland ans Internet angeschlossen. Per Dyndns sollen die Fillialen auf diesen zugreifen.
Die Fillialen sind teilweise auch über Kabel-Deutschland, aber auch über T-Com-Anschlüsse angeschlossen. Es sind unterschiedliche Router im Einsatz. D-Link, Linksys und Lancom. In der Zentrale ist der D-Link.
Außer diesem Problem sind weder in der Zentrale als auch in den Fillialen keine anderen Probleme mit dem Internet bekannt.
Läuft das Client-Programm innerhalb des LAN der Zentrale treten keine Probleme auf.

In meinem Programm wird die Connection bei beginn aufgebaut und währende der ganzen Laufzeit aufrecht gehalten. Mittels Timer werden zwischendurch immer mal wieder einzelne Abfragen an den Server gestartet. Aber keine Großen, die Übertragungsmenge liegt eher im kB-Bereich und auch die SQL-Abfrage-Strings sind nicht lang.
Der Server ist nicht ausgelastet.

Kennt einer dieses Problem? Oder hat einer eine Idee, wie ich das ändern kann? Ich weiß nicht, ob eine Unterbrechnung innerhalb des Internets statfindet, oder ob der SQL-Server die Verbindung getrennt hat.
Eine Zwangstrennung durch den Internetprovider schließe ich aus. Findet zwar mit Sicherheit statt, aber nicht in der Häufigkeit, wie mein Problem.

Wäre für jeden Hinweis dankbar.

mfg

PS: Die DB auf ein MySQL-Server eines Internetanbieters zu verlegen, scheidet leider wegen des nicht unterstützten direkten Zugriffs auf diesen aus.

nuclearping 26. Feb 2009 22:15

Re: MySQL Fehler 2006: Server has gone away
 
Der Fehler kann unterschiedliche Gründe haben.

http://dev.mysql.com/doc/refman/5.1/de/gone-away.html

Bernhard Geyer 26. Feb 2009 22:15

Re: MySQL Fehler 2006: Server has gone away
 
Kenn das nur wenn die Netzwerk-"Packet"-Größe über die eingestellt MySQL-Grenze liegt. Dies ist Standardmäßig bei 1MB. Sprich: Ein INSERT/UPDATE darf als gesamtpacketgröße (Nutzdaten, SQL-"Overhead", TCP-Overhead) nicht 1 MB überschreiten.

Captnemo 26. Feb 2009 23:07

Re: MySQL Fehler 2006: Server has gone away
 
@Greyer:

Also meine Abfragen überschreiten in gar keinem Fall auch nur annähernd 1MB. Wenn sie mal 150 KB groß sind, dann ist das in meinem Fall schon viel.

@nuclearping:

Hab mir das Dokument mal durchgelesen. Leider kann ich so ziemlich fast alles davon ausschließen. Aber ich hab gelesen, dass ein SQLPing einen Möglichen Timeout aufhält, bzw. einen reconnect anstößt. Also hab ich das einfach mal in meinen OnTimer-Event eingebaut. Mal sehen was das so bringt.

Ist aber für mich nur bedingt befiedigend. Denn wenn ich nicht weiß, wo genau der Fehler herkommt, kann er ja immer wieder auftreten. Ich beseitige Fehler immer lieber nachhaltig.

Bernhard Geyer 27. Feb 2009 08:34

Re: MySQL Fehler 2006: Server has gone away
 
Zitat:

Zitat von Captnemo
Also meine Abfragen überschreiten in gar keinem Fall auch nur annähernd 1MB. Wenn sie mal 150 KB groß sind, dann ist das in meinem Fall schon viel.

Check mal die Variable max_allowed_packet (Show Variables)

Zitat:

Zitat von Captnemo
Ist aber für mich nur bedingt befiedigend. Denn wenn ich nicht weiß, wo genau der Fehler herkommt, kann er ja immer wieder auftreten. Ich beseitige Fehler immer lieber nachhaltig.

Gute Einstellung :thumb:

Captnemo 27. Feb 2009 10:03

Re: MySQL Fehler 2006: Server has gone away
 
Zitat:

Zitat von Bernhard Geyer
Check mal die Variable max_allowed_packet (Show Variables)

Max_allowed_packet ist 1048576.

Meine Abfragen liegen in der Größen ordnung von 10 bis 200 Zeilen mit bis zu maximal 10 Feldern. Alles nur Strings, Integer und DateTime. Ich denke nicht, dass ich diese größe erreichen würde.

Selbst wenn ich in jedem Feld 100 Zeichen hätte, würde ich auf maximal 200000 Zeichen kommen. Mit ein bischen Overhead sind es dann vielleicht 250 Kb.

blawen 27. Feb 2009 17:34

Re: MySQL Fehler 2006: Server has gone away
 
Die Problematik hatte ich auch, bei mir reicht es, wenn ich mittels Timer die Verbindung regelmässig erneuere (sinngemäss):

Delphi-Quellcode:
procedure TFMD.JvTimer1Timer(Sender: TObject);
var
  Status : Boolean;

begin
  Status := FMD.Verbindung_erneuern;
end;

function TFMD.Verbindung_erneuern : Boolean;
begin
  IF ZCon.Ping THEN Result := True
  ELSE
    Try
      ZCon.Connect;
    Except
      Result := True;
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz