Avatar billede dsj Nybegynder
28. oktober 2002 - 19:30 Der er 11 kommentarer og
1 løsning

Mister forbindelse til DB

Jeg har et problem med at jeg mister forbindelsen til min MySQL-database (version 4.0.4). Jeg har en server-applikation kørende (Java), som har én konstant åben forbindelse til databasen, men efter et sted mellem 2 og 10 timer, mister den forbindelsen. MySQL-serveren kører stadig og er ikke gået ned. Jeg har afprøvet min server-applikation på to andre pc'er men uden det samme problem. Den fejlmeddelelse (SQLException) jeg får er:

  'Lost connection to server during query'

Nogen der har en ide til hvad der går galt. Det kører i øvrigt på et linux-system med JVM 1.4.
Avatar billede disky Nybegynder
28. oktober 2002 - 19:41 #1
Bliver MySQL af en eller anden årsag genstartet ?

Se evt. på uptime for db servere.
Avatar billede arne_v Ekspert
28. oktober 2002 - 20:03 #2
1)  Jeg tvivler på at problemet ligger i din servera-applikation.
    Det lyder nærmere som et net/net-kort/net-box problem.

2)  Hvorfor ikke ændre din server-applikation til at reconnecte
    til database hvis forbindelsen går ned ?

    Det vil da være en nyttig feature også i andre sammenhænge.
Avatar billede dsj Nybegynder
28. oktober 2002 - 20:06 #3
disky >> hvordan ser man oppetiden fra en shell (kommando)??

arne >> det vil jeg også lave, men at problemet kun gør sig gældende på en enkelt ud af 3 pc'er må betyde at der er et problem og det må jeg nok hellere få løst :/
Avatar billede dsj Nybegynder
28. oktober 2002 - 20:07 #4
MySQL-serveren og min server-applikation kører i øvrigt på samme maskine og jeg connecter til databasen med //localhost/mindb
Avatar billede disky Nybegynder
28. oktober 2002 - 20:12 #5
du skriver

mysqladmin -u root -p

indtaster så password og får noget i retningen af:
Uptime: 12017559  Threads: 1  Questions: 7102112  Slow queries: 0  Opens: 81579  Flush tables: 1  Open tables: 64 Queries per second avg: 0.591

Dette er taget fra min Linux server der har kørt i lang tid.

Det spændende er 'uptime'
Avatar billede arne_v Ekspert
28. oktober 2002 - 20:39 #6
Hmmm. Så er det jo næppe net-kortet. :-)

Men der må ske et eller andet på den maskine, som
ikke sker på de andre.

Kører der andre MySQL apps på den maskine som
ikke kører på de andre ?
Avatar billede dsj Nybegynder
29. oktober 2002 - 10:26 #7
disky >> er uptime angivet i sekunder?

Jeg skiftede i går aftes til en ældre version af MySQL (3.23) og tændte den omkring kl 23. Da jeg sendte den et input her til morgen kl ca 10 fik jeg samme fejlmeddelelse :(

Oppetiden er aflæst til 46713.
Avatar billede dsj Nybegynder
29. oktober 2002 - 10:29 #8
Ved I i øvrigt, hor error-log'en er placeret?

Den linux-server min java-server kører på er en forholdsvis lille maskine med kun 64 MB RAM og nogle få hundrede MHz, kan problemet evt. skyldes begrænsede ressourcer, når nu der også kører en JVM, apache, mysql og min java-server med 20 tråde ??
Avatar billede disky Nybegynder
29. oktober 2002 - 10:39 #9
Yep den er i sekunder.

Hmm ja det er ikke meget ram du har, men det skulle egentligt være nok.

Brug evt. en connection pool som holder styr på om forbindelserne findes endnu, så opretter den bare en ny hvis den er forsvundet som i dit tilfælde.
Avatar billede dsj Nybegynder
29. oktober 2002 - 10:58 #10
hvordan laver jeg en så en connection-pool ... ligger lidt udenfor hvad de gad og lære os på datamatiker-studiet.

Kender du evt. et website som forklarer og har noget eksempel-kode ??
Avatar billede dsj Nybegynder
30. oktober 2002 - 11:39 #11
Når jeg genåbner min forbindelse til db'en efter den er gået ned og kører min query igen, får jeg følgende exception:

java.sql.SQLException: Communication link failure: java.net.SocketException

Siger det jer noget?
Avatar billede dsj Nybegynder
31. oktober 2002 - 14:15 #12
Løsningen er fundet... Svaret ligger i driveren til MySQL-DB'en, hvor man kan sætte den til at reconnecte, hvis forbindelsen ryger:

con = DriverManager.getConnection(url+"?user="+user+"&password="+pass
                                        +"&autoReconnect=true"
                                        +"&maxReconnects="+MAX_RECONNECTS);

Se http://mmmysql.sourceforge.net/doc/mm.doc/c106.htm

Problemet kan løses ved en connection-pool, og man kan ikke selv i Java implementere reconnect...det skal ske via en parameter i driveren.

En anden løsning er at lave en dummy-query en gang i kvarteret.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester