figoleparigo | 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 :
- function DBConnect : boolean;
- begin
- Result := false;
- // Init des paramètres pour le serveur MySQL
- if mySQL_Res <> nil then
- mysql_free_result(mySQL_Res);
- mySQL_Res := nil;
- if mySQLhandle <> nil then
- begin
- mysql_close(mySQLhandle);
- mySQLhandle := nil;
- end;
- // Init du serveur MySQL
- mySQLhandle := mysql_init(nil);
- if mySQLhandle = nil then
- begin
- Verbose(VRB_ERROR, '*** mysql_init failed !!! ***', []);
- Result := false;
- Exit;
- end;
- // Tentative de connexion à la base de données
- if mysql_real_connect(mySQLhandle, pChar(CfgCampi.GetMgrServerHost), pChar(CfgCampi.GetMgrDbUsername),
- pChar(CfgCampi.GetMgrDbUserpass), pChar(CfgCampi.GetMgrDbPath), 0, nil, CLIENT_MULTI_STATEMENTS) = nil then
- begin
- Verbose(VRB_ERROR, '*** Connexion to database failed !!! ***', []);
- Verbose(VRB_ERROR, 'MySQL Error: %s', [UnicodeString(mysql_error(mySQLhandle))]);
- Result := false;
- Exit;
- end
- else
- begin
- Verbose(VRB_INFO, 'Connected to MySQL server: %s', [UnicodeString(mysql_get_server_info(mySQLhandle))]);
- end;
- // Fonction à lancer après chaque connexion
- if (mysql_set_character_set(mySQLhandle, pChar('UTF8')) <> 0) then
- begin
- Verbose(VRB_ERROR, 'MySQL Error: %s', [UnicodeString(mysql_error(mySQLhandle))]);
- end;
- Result := not (Result);
- end;
|
Voilà la fonction que j'utilise pour les INSERT/UPDATE:
Code :
- procedure mysql_insertdata(query : string);
- begin
- // Test la connexion à la base
- if not DBConnected then // Utilise mysql_ping pour tester la connexion
- Exit;
- try
- // Execute la requête
- if mysql_real_query(mySQLhandle, PAnsiChar(query), Length(query)) <> 0 then
- begin
- Verbose(VRB_ERROR, 'MySQL Error: %s', [UnicodeString(mysql_error(mySQLhandle))]);
- end;
- except
- on e: Exception do
- begin
- Verbose(VRB_ERROR, '---- Exception inserting qry : %s', [query]);
- Verbose(VRB_ERROR, 'MySQL Error: %s', [UnicodeString(mysql_error(mySQLhandle))]);
- Verbose(VRB_ERROR, '%s', [e.Message]);
- end;
- end;
- 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
|