Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/01/2011, 11h07   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 1
Points : 1
Par défaut Importation d'un fichier texte de 17 Go

Bonjour,

Mon soucis est le suivant:

Je dois remplir une table de ma base de données à l'aide d'un fichier au format texte.
Seul problème, le fichier à une taille de 17 Go.

J'utilise WAMP et phpMyAdmin.

Au lieu de l'importer en une fois, j'ai décidé de le fragmenter et d'effectuer une boucle utilisant "load data infile" dans le répertoire contenant les fichiers dans C:\wamp\bin\mysql\data\ma_base_de_donnée.

Pour l'instant, les fichiers ont une taille de 4Mo.
La boucle commence et au bout de 80 secondes en général un message d'erreur apparait: "server has gone away".
Seuls deux fichiers ont été importé.

J'ai donc changé les paramètres du temps d'excution d'un script dans php.ini
"max_execution_time = 600" et "max_input_time = 600" mais rien n'y fait.

Est-ce que quelqu'un pourrait me mettre sur un voie SVP...? Merci d'avance.
JulienDB44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 11h23   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par JulienDB44 Voir le message
Je dois remplir une table de ma base de données à l'aide d'un fichier au format texte.
Seul problème, le fichier à une taille de 17 Go.
Pas mal !

Citation:
J'utilise WAMP et phpMyAdmin.

Au lieu de l'importer en une fois, j'ai décidé de le fragmenter et d'effectuer une boucle utilisant "load data infile" dans le répertoire contenant les fichiers dans C:\wamp\bin\mysql\data\ma_base_de_donnée.

Pour l'instant, les fichiers ont une taille de 4Mo.
Tu as fait 4250 fichiers ?

Citation:
La boucle commence et au bout de 80 secondes en général un message d'erreur apparait: "server has gone away".
Seuls deux fichiers ont été importé.

J'ai donc changé les paramètres du temps d'excution d'un script dans php.ini
"max_execution_time = 600" et "max_input_time = 600" mais rien n'y fait.
Essaie de lancer un LOAD_DATA_INFILE directement avec la console MySQL plutôt que d'utiliser phpMyAdmin comme ça plus de problème avec les paramètres de php.

Sinon de mémoire, il me semble que j'avais réussi à contourner le problème du max_execution_time en le mettant à zéro.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 12h00   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 1
Points : 1
Bonjour,

Non je n'ai pas encore fait 4250 fichiers, pour l'instant je teste...

Sinon, j'ai efféctivement lancé le "load data infile" via la console MySQL et ça ne plante pas.
Le plus gros fichier que j'ai pu chargé avec la console faisait 300 Mo.
Je n'ose pas lancé le fichier de 17 Go en une fois par la console...

Mais mon soucis s'est l'automatisation de l'import de plusieurs fichiers avec une boucle en php.

J'ai testé avec "max_execution_time = 0".

Même probleme :
"MySQL server has gone away" et "maximum_execution_time exceeded"...
JulienDB44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 14h03   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Un coup d'oeil à la doc de php dit ceci (j'ai mis en gras des parties qui peuvent t'intéresser) :
Citation:
max_execution_time entier Fixe le temps maximal d'exécution d'un script, en secondes. Cela permet d'éviter que des scripts en boucles infinies saturent le serveur. La configuration par défaut est de 30 secondes. Lorsque PHP fonctionne depuis la ligne de commande, la valeur par défaut est 0.
Le temps d'exécution maximum n'est pas affecté par des appels systèmes tels que sleep(). Reportez-vous à la fonction set_time_limit() pour plus de détails.
Vous ne pouvez pas modifier la valeur de cette directive avec ini_set() lorsque PHP est configuré en safe mode. Le seul moyen de le faire est de désactiver le safe mode ou de changer la valeur dans php.ini.
Votre serveur web peut avoir d'autres configurations de la durée limite d'exécution qui peuvent également interrompre PHP. Apache a une directive Timeout et IIS a une fonction CGI pour cela. Par défaut, elles valent toutes les deux 300 secondes. Reportez-vous à la documentation de votre serveur web pour plus de détails.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 14h55   #5
Invité de passage
 
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 1
Points : 1
Ce serait Apache qui poserait problème ?

J'avais déjà vu sur des forums ce "timeout", j'avais cherché dans httpd.conf dans apache pour la changer, mais impossible de trouver ce paramètre.

Dans quel fichier pensez-vous qu'on puisse régler ce paramètre... si on peut le régler bien sûr
JulienDB44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 15h30   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Une piste chez Apache. C'est l'un des premiers paramètres de httpd.conf.

Il y a aussi un paramètre Timeout situé chez moi à la 359ème ligne, après les paramètres ServerAdmin et ServerName (ce dernier est commenté sur mon PC).
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 16h32   #7
Invité de passage
 
Inscription : janvier 2011
Messages : 13
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : janvier 2011
Messages : 13
Points : 1
Points : 1
Merci pour votre aide...

J'ai fait une recherche automatique dans httpd.conf et TimeOut n'existe pas pas...j'ai donc ajouté à la fin du fichier "TimeOut 300".

Mais cela ne change pas mon problème :

La boucle fonctionne sur les deux premiers fichiers de 4 Mo et aux environs de 80 secondes...l'erreur apparait : "MySQL Server has gone away" et "maximum_execution_time exceeded (60 seconds)"...
JulienDB44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 17h16   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
C'est Timeout et pas TimeOut !

Et Timeout 300 veut dire que tu coupes à 300 secondes, c'est à dire 5 minutes.

Ce qui n'explique pas quand même ta coupure à 80 secondes !

N'étant pas un spécialiste de ces paramétrages, je ne peux t'aider davantage.
Regarde du côté du forum Apache ou du forum php peut-être.

Ceci dit, je me souviens avoir importé sans difficulté des fichiers d'environ 1Go avec LOAD_DATA_INFILE et c'était relativement rapide.

C'est un import à faire sur ton PC ou sur un serveur en production ?

Si c'est sur une machine hors production, lance le LOAD_DATA_INFILE du gros fichier de 17 Go ce soir en console MySQL et tu verras demain si c'est fini !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 15h01   #9
Invité de passage
 
Inscription : octobre 2008
Messages : 21
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 21
Points : 4
Points : 4
question peut être bête : si ce n'est pas une opération récurrente, pourquoi ne pas importer directement ton fichier depuis phpmyadmin ? si le fichier est trop volumineux, phpmyadmin le téléchargera en plusieurs fois... il faut copier au préalable ton fichier dans un répertoire de phpmyadmin, et ensuite choisir ce fichier depuis l'onglet "importer". Il devrait apparaître ici : "répertoire de transfert du serveur Web"...

bonne journée
swakone est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h22.


 
 
 
 
Partenaires

Hébergement Web