Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2621 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Perte de connexion avec la base MySQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Perte de connexion avec la base MySQL

n°1943823
figolepari​go
Posté le 24-11-2009 à 09:25:26  profilanswer
 

Bonjour à tous,
 
Je travaille sur un service Windows en Delphi/Pascal et j'utilise une BD MySQL pour traiter des données.
J'utilise mysql.pas + libmysql.dll pour discuter avec la base et ça fonctionne plutôt bien.
Mais voilà, quand je lance le service qui doit faire des UPDATE et des INSERT par centaines, j'ai l'erreur suivante au bout de qq dizaines d'INSERT/UPDATE (réalisé avec succès en plus):
"Lost connection to MySQL server at 'reading initial communication packet', system error: 0" et je perds la connexion, que je relance et qui retombe etc...
 
J'utilise Wamp2.0i, et je me connecte sans problème à la base au démarrage, et je fais des SELECT à profusion sans aucun soucis.
 
Quelqu'un aurait-il une idée car je sèche un peu...?
 
D'avance merci.
 
------- Un bout de code:
Voilà le code pour me connecter au démarrage du Service:

Code :
  1. function DBConnect : boolean;
  2. begin
  3. Result := false;
  4. // Init des paramètres pour le serveur MySQL
  5. if mySQL_Res <> nil then
  6. mysql_free_result(mySQL_Res);
  7. mySQL_Res := nil;
  8. if mySQLhandle <> nil then
  9. begin
  10. mysql_close(mySQLhandle);
  11. mySQLhandle := nil;
  12. end;
  13. // Init du serveur MySQL
  14. mySQLhandle := mysql_init(nil);
  15. if mySQLhandle = nil then
  16. begin
  17. Verbose(VRB_ERROR, '*** mysql_init failed !!! ***', []);
  18. Result := false;
  19. Exit;
  20. end;
  21. // Tentative de connexion à la base de données
  22. if mysql_real_connect(mySQLhandle, pChar(CfgCampi.GetMgrServerHost), pChar(CfgCampi.GetMgrDbUsername),
  23. pChar(CfgCampi.GetMgrDbUserpass), pChar(CfgCampi.GetMgrDbPath), 0, nil, CLIENT_MULTI_STATEMENTS) = nil then
  24. begin
  25. Verbose(VRB_ERROR, '*** Connexion to database failed !!! ***', []);
  26. Verbose(VRB_ERROR, 'MySQL Error: %s', [UnicodeString(mysql_error(mySQLhandle))]);
  27. Result := false;
  28. Exit;
  29. end
  30. else
  31. begin
  32. Verbose(VRB_INFO, 'Connected to MySQL server: %s', [UnicodeString(mysql_get_server_info(mySQLhandle))]);
  33. end;
  34. // Fonction à lancer après chaque connexion
  35. if (mysql_set_character_set(mySQLhandle, pChar('UTF8')) <> 0) then
  36. begin
  37. Verbose(VRB_ERROR, 'MySQL Error: %s', [UnicodeString(mysql_error(mySQLhandle))]);
  38. end;
  39. Result := not (Result);
  40. end;

 
 
 
Voilà la fonction que j'utilise pour les INSERT/UPDATE:
 

Code :
  1. procedure mysql_insertdata(query : string);
  2. begin
  3. // Test la connexion à la base
  4. if not DBConnected then // Utilise mysql_ping pour tester la connexion
  5. Exit;
  6. try
  7. // Execute la requête
  8. if mysql_real_query(mySQLhandle, PAnsiChar(query), Length(query)) <> 0 then
  9. begin
  10. Verbose(VRB_ERROR, 'MySQL Error: %s', [UnicodeString(mysql_error(mySQLhandle))]);
  11. end;
  12. except
  13. on e: Exception do
  14. begin
  15. Verbose(VRB_ERROR, '---- Exception inserting qry : %s', [query]);
  16. Verbose(VRB_ERROR, 'MySQL Error: %s', [UnicodeString(mysql_error(mySQLhandle))]);
  17. Verbose(VRB_ERROR, '%s', [e.Message]);
  18. end;
  19. end;
  20. end;

 
 
--------- Autre point, la limite de l'utilisateur:
J'ai regardé les paramètres (max_connections, max_updates, max_user_connections, max_questions) et ils sont tous à 0. Ça veut dire qu'ils sont illimités, d'après la doc MySQL.
 
J'ai fait une petite appli à coté qui fait 20000 insertions, updates et appels de procédures, c'est un peu long 40mn, mais aucune erreur n'est signalée dans les logs.


Message édité par figoleparigo le 30-11-2009 à 14:48:52
mood
Publicité
Posté le 24-11-2009 à 09:25:26  profilanswer
 

n°1946165
figolepari​go
Posté le 01-12-2009 à 09:42:57  profilanswer
 

J'ai enfin trouvé la cause de mon problème de déconnexions intempestives. (au cas où ça intéresserait quelqu'un...)   :sarcastic:  
 
Dans mon service Windows, j'ai un Timer qui se déclenche toutes les 3s pour rythmer les threads de traitement des données. Et dans ce timer, je fais un "mysql_ping" pour tester la connexion avec le serveur MySQL.
 
Quand le ping arrive pendant que le serveur traite une requête, "BOOM!!" ça explose....   :fou:  
Donc maintenant je vérifie qu'aucun thread ne travaille avant de faire le ping, et tout va bien...
Plus de déconnexion!!   :D  
 
Leçon à retenir; ne jamais faire de "mysql_ping" en même temps qu'un "mysql_real_query"...   :sol:  
 
Merci bcp pour votre participation...
 
Stef.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Perte de connexion avec la base MySQL

 

Sujets relatifs
Pb acces base de donnéeProblème de connexion avec le serveur MySQL
Problème de lecture de base de données SQLite (Java)Problemes requetes PHP/MySql
ASP - MYSQL -Monitorer les accès en base de données MySQL
Problème insertion dans une base d'un champ texteProblème PL/SQL Si tuple déjà dans la base
Plus de sujets relatifs à : Perte de connexion avec la base MySQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR