[Résolu] Script de transfère de base de donnée

Script de transfère de base de donnée [Résolu] - PHP - Programmation

Marsh Posté le 26-05-2006 à 10:14:06    

Bonjour à tous,
 
J'ai crée un script PHP qui permet de transfèrer une base de donnée vers une autre base de donnée.
 
Le problème est que ma base de donnée est très grande, environ 200 000 enregistrement.
Un premier problème venait du faite que le temps d'execution du script été trop longue (max_execution_time = 30), que j'ai réglé à 300.
 
Mais le second est un problème que je ne sait pas résoudre, Internet Explorer bloque avant la fin du traitement.
Le script tourne 50-60s et il se bloque.
72 000 donnée ont été transféré sur 200 000.
 
Peut-être connaissez-vous une solution pour palier à ce problème ou peut-être une optimisation du code.
 
En voici un extrait :
 
 

Code :
  1. $linkdb1 = mysql_connect($serv_db1, $nomutil_db1, $mdp_db1) or die ("Impossible de se connecter à l'ancienne base de donnée" );
  2. mysql_select_db($nombase_db1, $linkdb1) or die ("Impossible de selectionner la base de donnée 1" );
  3. $sql_article = mysql_query("SELECT code7, descriptif, renseignements FROM article", $linkdb1) or die ("Erreur de lecture de la table Article<br /><br /><b>".mysql_error()."</b>" );
  4. mysql_close($linkdb1);
  5. $linkdb2 = mysql_connect($serv_db2, $nomutil_db2, $mdp_db2) or die ("Impossible de se connecter à la nouvelle base de donnée" );
  6. mysql_select_db($nombase_db2, $linkdb2) or die ("Impossible de selectionner la base de donnée" );
  7. $nb_article = 0;
  8. while($article = mysql_fetch_row($sql_article))
  9. {
  10. echo $nb_article."<br />";
  11. $nb_article = $nb_article + 1;
  12. mysql_query("INSERT INTO articles (code, libelle, description) VALUES ('".$article[0]."', '".$article[1]."', '".$article[2]."')", $linkdb2);
  13. }
  14. mysql_close($linkdb2);
  15. echo "Transfère de la table article réalisé avec succès !";


 
 
Merci d'avance !


Message édité par cvex le 29-05-2006 à 10:35:52
Reply

Marsh Posté le 26-05-2006 à 10:14:06   

Reply

Marsh Posté le 26-05-2006 à 10:26:44    

Si tu as accès au système, utilises la commande "mysqldump" qui sera plus aisée pour exporter et importer tes données
 
Si tu n'as pas accès au système, regardes plutôt du côté de ces deux requêtes là :

Code :
  1. SELECT * INTO OUTFILE '/tmp/pouet.sql' FROM article


et

Code :
  1. LOAD DATA INFILE '/tmp/pouet.sql' INTO TABLE article


 
Bon courage

Reply

Marsh Posté le 26-05-2006 à 10:45:59    

Merci, je planche dessus :p et je te dis quoi :)

Reply

Marsh Posté le 26-05-2006 à 14:24:54    

en faite, j'ai réussi à contourner le problème mais maintenant je suis confronté à un autre problème.
La boucle fait bien son travail mais tout les enregistrements ne sont pas inscrit dans la nouvelle base de donnée.
Un peu plus de 50% des données sont copiés dans la nouvelle base de donnée.
 
Avez-vous une aide sur le problème? Est-ce moi qui boucle mal?
Merci d'avance

Reply

Marsh Posté le 26-05-2006 à 15:05:59    

pourquoi tiens-tu tant à faire une boucle alors que tu peux le faire en 2 requêtes ? :/

Reply

Marsh Posté le 26-05-2006 à 15:43:34    

Ba oui mais je ne vois pas comment on peut faire avec les 2 requetes, alors que les tables ne se nomme pas pareil et les champs n'ont pas les meme nom.

Reply

Marsh Posté le 27-05-2006 à 11:20:02    

as-tu essayé ? as-tu regardé ce qu'on pouvait faire avec ces requêtes ? va falloir que je te mâche le travail alors ? :/

Code :
  1. SELECT code7, descriptif, renseignements INTO OUTFILE '/tmp/pouet.sql' FROM article


Ensuite tu fais un

Code :
  1. LOAD DATA INFILE '/tmp/pouet.sql' INTO TABLE articles (code, libelle, description)


 
Et quand on a un doute : http://dev.mysql.com/doc/
Car je t"avais aiguillé sur deux requêtes, non pas pour que tu fasses copier/coller mais que tu regardes les fonctionnalités de ces deux requêtes

Reply

Marsh Posté le 29-05-2006 à 10:35:32    

Merci beaucoup de ton aide mon problème est résolu :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed