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

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1375360
cvex
$CveX
Posté le 26-05-2006 à 10:14:06  profilanswer
 

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
mood
Publicité
Posté le 26-05-2006 à 10:14:06  profilanswer
 

n°1375362
couak
Posté le 26-05-2006 à 10:26:44  profilanswer
 

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

n°1375368
cvex
$CveX
Posté le 26-05-2006 à 10:45:59  profilanswer
 

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

n°1375560
cvex
$CveX
Posté le 26-05-2006 à 14:24:54  profilanswer
 

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

n°1375590
couak
Posté le 26-05-2006 à 15:05:59  profilanswer
 

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

n°1375607
cvex
$CveX
Posté le 26-05-2006 à 15:43:34  profilanswer
 

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.

n°1375932
couak
Posté le 27-05-2006 à 11:20:02  profilanswer
 

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

n°1376471
cvex
$CveX
Posté le 29-05-2006 à 10:35:32  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[RESOLU] initialisation de maps[RESOLU] Traduction BBCode html
[JS/DOM] Bug sous IE, l'image se s'affiche pas ! [RESOLU][Java] Problème échanges client-serveur (Résolu)
[Résolu] Appel de destructeur après avoir utilisé une dllplobeme de "réflexion" pour la structure d'une base de données
Securisation d'un script de listage de fichiers [resolu][RÉSOLU] Nom de fonction non reconnu
génération de fichier XML à partir d'une base de données SQL ?? 
Plus de sujets relatifs à : [Résolu] Script de transfère de base de donnée


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