mysql server has gone away hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erkankurtaga
Üye
Mesajlar: 62
Kayıt: 04 Oca 2009 06:36

mysql server has gone away hatası

Mesaj gönderen erkankurtaga »

delphi 7 + zeos bileşeni + mysql kullanarak bir program yazdım. veri tabanına uzaktan bağlanarak ulaşıyorum, yani yapılmış bir sitenin veri tabanı. Bağlantıda bi problem yok verileri çekebiliyorum. yalnız bi süre sonra "mysql server has gone away" hatasını alıyorum ve program çalışmıyor. bu sorunnun nedeni nedenini ve çözümünü öğrenmemde yardımcı olabilir misiniz. şimdiden teşekkürler.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: mysql server has gone away hatası

Mesaj gönderen Battosai »

Bağlantının koptuğunun işareti kendisi..zaten hata kendini açıklıyor. Sizin internet bağlantınızdaki anlık kopukluktan veya bağlantının zaman aşımından bu sorunlar çıkmaktadır. Ayrıca bu hatayı ondisconnect olayında yakalayamıyorsunuz. Yapılması gereken her işlem için hata yakalama bloğunda bu tarz sorunlar var ise işlemi bağlantıyı kurup tekrar yapmak. if Zconnection.connected then gibi bir kontrol işe yaramayacaktır...disconnect olmadan bu kontrol işe yaramaz.
erkankurtaga
Üye
Mesajlar: 62
Kayıt: 04 Oca 2009 06:36

Re: mysql server has gone away hatası

Mesaj gönderen erkankurtaga »

Battosai yazdı:Bağlantının koptuğunun işareti kendisi..zaten hata kendini açıklıyor. Sizin internet bağlantınızdaki anlık kopukluktan veya bağlantının zaman aşımından bu sorunlar çıkmaktadır. Ayrıca bu hatayı ondisconnect olayında yakalayamıyorsunuz. Yapılması gereken her işlem için hata yakalama bloğunda bu tarz sorunlar var ise işlemi bağlantıyı kurup tekrar yapmak. if Zconnection.connected then gibi bir kontrol işe yaramayacaktır...disconnect olmadan bu kontrol işe yaramaz.
cevabınız için teşekkürler. peki çözümü hakkında bir öneri verebilir misiniz
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: mysql server has gone away hatası

Mesaj gönderen Battosai »

Yapılması gereken her işlem için hata yakalama bloğunda bu tarz sorunlar var ise işlemi bağlantıyı kurup tekrar yapmak
örnek olarak olmasda cevap vermişim aslında...birde örnek verelim...

Kod: Tümünü seç

function Sorgu(Dataset:TZQuery; SQL:string):boolean;
Begin
try
Result:=False;
Dataset.Close;
Dataset.SQL.Text:=SQL;
Dataset.Open;
Result:True;
except on E:Exception do 
  Begin 
    if Pos('gone away',E.message)>0 then
        Begin
            Zconnection.disconnect;
            Zconnection.connect;
        End;
  End;
end;
end;
Şöyle kullanılabilir...

Kod: Tümünü seç

if Sorgu(Zquery1,'select *from tablo')=false then
   Sorgu(Zquery1,'select *from tablo');
Yani ilk seferde has gone away hatası varsa tekrar bağlantı sağlanıp işlemi yeniliyoruz...aslında bu işlem fonksiyon içinede gömülebilir. ayrıca hangi hata mesajlarında nasıl davranılacağını ne mesaj verileceğini örneğe bakarak kendin düzenleyebilirsin.
erkankurtaga
Üye
Mesajlar: 62
Kayıt: 04 Oca 2009 06:36

Re: mysql server has gone away hatası

Mesaj gönderen erkankurtaga »

verdiğiniz bilgiler için teşekkür ederim.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: mysql server has gone away hatası

Mesaj gönderen mkysoft »

Ben bir timer nesnesi içine 30 saniyede bir mysqlden time bilgisini çeken bir kod yazmıştım, eğer cevap alamazsam kullanıcıyı uyarıyordum, reconnect için. Mysql timeout süresi düşükse işlem yapmadığınız zamanlarda sizi sisteminden atıyor da olabilir (my.ini dosyasında ayarı var, SHOW VARIABLES sorgusu ile ayarlanmış değeri de göreiblirsiniz.).
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: mysql server has gone away hatası

Mesaj gönderen Battosai »

mkysoft 30 saniye az bir süre değil mi time out süresine göre daha fazla bir değer verilebilir...birde thread kullanmadan işlemi yapıyorsanız uzak makinalara bağlantıda kitlenme sıkıntıları ortaya çıkabilir. Localde sorun olmaz zaten...
erkankurtaga
Üye
Mesajlar: 62
Kayıt: 04 Oca 2009 06:36

Re: mysql server has gone away hatası

Mesaj gönderen erkankurtaga »

öncelikle cevaplarınız için teşekkür ediyorum. verdiğiniz bilgiler ışığında şunu düşünüyorum verit tabanı ile olan her işlemimde (ekleme,silme düzeltme,kaydetme,listeleme vb...) connection nesnesini (bahsettiğimiz hatayı) kontrol etsem ve durum düzelinceye kadar programı bekletsem ve bekletme için bi süre versem bu denemeler sonunda bağlanmazsa programı yeniden başlatmayı düşünüyorum.
erkankurtaga
Üye
Mesajlar: 62
Kayıt: 04 Oca 2009 06:36

Re: mysql server has gone away hatası

Mesaj gönderen erkankurtaga »

yukarıda belittiğim şekilde olmadı. ben de timerla 5 snde bir dbcon.reconnect yaparak çözdüm.
herkese teşekkürler.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: mysql server has gone away hatası

Mesaj gönderen Battosai »

ben de timerla 5 snde bir dbcon.reconnect

Çözülmüş gibi gelmektedir sana yani kullandığın yöntem sakıncalı...tavsiye edilmez. VT i meşgul edecek gereksiz işlemlerden kaçın. Şimdi sana bir sorun yok gibi görünsede işlemler sırsında çakışma olduğunda yada uzak makinalara bağlantı yaptığında sıkıntıları görürsün...birde bu işe çok kullanıcı mevzusu dahil oldu mu VT sana çok kızar "ne bağlanıp duruyon zaten bağlısın diye" :)
Birde global exception meselesi var onun bir örneğini incele bu hatayı aldığında reconnect ol...

Kod: Tümünü seç

// application-global exception handler

type
  TForm1 = class(TForm)
    procedure MyHandler(Sender: TObject; E : Exception);
    procedure FormCreate(Sender: TObject);
  end;

procedure TForm1.MyHandler(Sender: TObject; E : Exception);
begin
 if Pos('gone away',E.message)>0 then
        Begin
           Zconnection.reconnect;
        End;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnException := MyHandler;
end;
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: mysql server has gone away hatası

Mesaj gönderen mkysoft »

Konuyu kim webservice olayına bağlayacak diye bekliyorum. Eğer işlenen veri önemliyse, web servisi yazmanız şiddetle tavsiye edilir. internette bağlantı hatasına neden olabilecek o kadar çok şey varki.
Cevapla