mysql server has gone away hatası
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 62
- Kayıt: 04 Oca 2009 06:36
mysql server has gone away hatası
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.
Re: mysql server has gone away hatası
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.
-
- Üye
- Mesajlar: 62
- Kayıt: 04 Oca 2009 06:36
Re: mysql server has gone away hatası
cevabınız için teşekkürler. peki çözümü hakkında bir öneri verebilir misinizBattosai 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.
Re: mysql server has gone away hatası
örnek olarak olmasda cevap vermişim aslında...birde örnek verelim...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
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;
Kod: Tümünü seç
if Sorgu(Zquery1,'select *from tablo')=false then
Sorgu(Zquery1,'select *from tablo');
-
- Üye
- Mesajlar: 62
- Kayıt: 04 Oca 2009 06:36
Re: mysql server has gone away hatası
verdiğiniz bilgiler için teşekkür ederim.
Re: mysql server has gone away hatası
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.).
Re: mysql server has gone away hatası
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...
-
- Üye
- Mesajlar: 62
- Kayıt: 04 Oca 2009 06:36
Re: mysql server has gone away hatası
ö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.
-
- Üye
- Mesajlar: 62
- Kayıt: 04 Oca 2009 06:36
Re: mysql server has gone away hatası
yukarıda belittiğim şekilde olmadı. ben de timerla 5 snde bir dbcon.reconnect yaparak çözdüm.
herkese teşekkürler.
herkese teşekkürler.
Re: mysql server has gone away hatası
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;
Re: mysql server has gone away hatası
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.