Restaurer une SQL de 25mo

WRInaute discret
J'ai une sql de 25 Mo a restaurer, j'ai beau la copier coller sur phpmyadmin aucun effet, même après 20min d'attente..

Comment m'y prendre ?

Merci
 
WRInaute accro
T'as pas d'accès SSH, tu vas devoir importer ta base de données en petits morceaux dans phpMyAdmin ou bien utiliser un outil d'import/export de base de données qui va faire ça en plusieurs fois pour toi.
 
WRInaute accro
Bonjour

Je suppose que ton fichier *.txt est formatté, avec des séparateurs d'enregistrements, et avec des nombres égaux de colonnes, pour chaque table.

Donc, d'abord à partir de ce fichier *.txt, il faut faire autant de fichiers *.txt que de tables SQL ( je suppose MySQL ), avec un nombre égal de colonnes, et un séparateur d'enregistrements ( appelons-le: ';' si c'est un point-virgule.

Le fin du fin, serait d'appeler tous ces fichiers par leurs noms de table associées, ce qui rend le programme d'import entièrement automatique.

Attention: Les noms de tables sont sensibles à la casse des caractères.

Donc tu as par exemple les fichiers: sauce.txt , plat.txt, et dessert.txt , formattés avec le point-virgule comme séparateur d'enregistrement.

Ensuite, il faut évidemment créer chaque table dans la base de données, avec leurs index:

CREATE TABLE sauce(champ_1 type_1, champ_2 type_2, etc...
, PRIMARY KEY(champ_x_1, champ_x_2));

Ceci sera fait à la main sous phpMyAdmin, en remplaçant chaque nom de champ champ_1, _2 etc... par les champs dont tu connais les noms et les types.

La ligne PRIMARY KEY n'est indiqué que s'il y a une clé primaire, qui peut inclure au choix, un ou plusieurs champs.

Enfin, tu ajoutes chaque index, unique ou multiple, par exemple:

CREATE [ UNIQUE ] INDEX nom_index_1 ON sauce(champ_x_1, champ_x_2, etc...);

UNIQUE est indiqué seulement si l'index est unique, c'est-à-dire que l'ensemble du ou des champs ne doit exister qu'en une seule valeur dans l'ensemble de la table sauce.

Il peut y avoir un ou plusieurs champs champ_x_1, champ_x_2, etc... selon tes besoins.

Une fois que tu as fait tout le travail préliminaire, tu peux enfin faire un:

COMMIT;

histoire de faire comme les grandes base de données transactionnelles type ORACLE... ;)

Ensuite, voici un script php qui pourra faire le travail d'importation:

D'abord, tu place tous tes fichiers d'import sauce.txt, etc... dans le même répertoire ou sera le script, appelons-le import.php

Example de script import.php ( à corriger par ceux qui savent ):

<?php

$base = "xxxx"; // Nom de la bdd
$url = "yyyy"; // Hôte de la bdd
$login = "zzzzzz"; // Nom utilisateur
$passwd = "uuuuuu"; // Mot de passe

$conn = @mysql_connect($url, $login, $passwd);

if(!$conn)
{
// Traitement d'erreur
exit(-1);
}

if(!@mysql_select_db($base, $conn))
{
@mysql_close($conn);

// Traitement d'erreur.
exit(-1);
}

$tables = array('sauce', 'plat', 'dessert'); // Les noms des tables et des fichiers associés

foreach($tables as $table) {

unset($filename);
$filename = $table . ".txt"; // Nom du fichier associé à la table $table

unset($sql);
$sql = "LOAD DATA INFILE '" . $filename . "' INTO TABLE '" . $table . "' CHARACTER SET latin1 FIELDS TERMINATED BY ';'";

// Attention ce n'est peut-être pas très visible, mais il faut les simples quotes à côté des doubles quotes pour encadrer $filename et $table.

if(!@mysql_query($sql, $conn))
{
// Traitement d'erreur...
echo "Erreur en chargeant $filename dans $table avec la commande:<br>\n";
echo $sql . "<br>\n";
echo @mysql_error($conn) . "<br>\n";
@mysql_close($conn);
exi(-1);
}
} // Fin de la boucle foreach

@mysql_close($conn);

echo "L'import s'est terminé avec succès ! <br>\n";

exit(0);
?>

Normalement, il ne devrait pas y avoir de problème de temps d'exécution maximum autorisé du script, car cette fonction load data est très rapide.

Si de ce côté-là il y a des difficultés, tu peux toujours lancer ce load data à partir de phpMyAdmin, théoriquement ( à moins que je ne me trompe pour plus de 8 méga-octets il me semble qu'il y a une limite, mais cela ne concerne peut-être pas les load data ).

Si ce n'est pas le SGBD MySQL, je ne sais pas... ;(

Bien à vous.

Amicalement.

Jean-François Ortolo
 
WRInaute accro
J'ajoute...

Pour le CHARSET de $sql , j'ai indiqué latin1 , qui est équivalent à ISO-8859-1 ou ISO-8859-15.

Dans le cas où tes tables seraient en UTF-8, il faudrait remplacer latin1 par: utf8

D'autre part, si le charset par défaut de ta database est différent de celui dans lequel seront les tables, il faut ajuster l'instruction SQL CREATE TABLE en spécifiant le charset.

Bon courage.

Bien à vous.

Amicalement.

Jean-François Ortolo
 
Discussions similaires
Haut