Version complète: sur le forum Webmaster Hub : Pb d'importation de base de données...
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Bourinho
Bonjour le Hub,

J'ai un petit mutualisé chez OVH et je n'arrive pas à importer ma base de données sur mon hébergement... J'ai pourtant essayer de suivre les instructions fournies sur le site suivant mais cela ne fonctionne pas...

J'ai donc écrit le petit fichier php suivant :
CODE
<?php
echo "Décompression du fichier.....";
system("gunzip Labase.sql.gz");
echo "Votre base est en cours de restauration......";
system("cat Labase.sql | mysql --host=**host** --user=**user** --password=**pass** **LabaseOVH**");
echo "C'est fini. Votre base est en place sur cet hébergement.";
?>


je n'ai aucun message d'erreur mais je ne retrouve pas mes données sur ma base chez OVH... Je ne trouve même pas le fichier décompressé dans le répertoire en question...

Quelqu'un aurait il une idée pour me dépétrer de ce soucis???

Par avance, merci!

[Edit]
J'ai essayé avec le fichier suivant :
CODE
<?php
echo "Décompression du fichier.....";
system("gunzip Labase.sql.gz",$err1);
echo $err1;
echo "Votre base est en cours de restauration......";
system("cat Labase2.sql | mysql --host=**host** --user=**user** --password=**pass** **LabaseOVH**", $err2);
echo $err2;
echo "C'est fini. Votre base est en place sur cet hébergement.";
?>

où Labase2.sql est le fichier Labase.sql.gz déjà dézippé...
J'ai $err1=0 et $err2=1... unsure.gif
Jeromnimo
Bonjour,

Il me semble que la comande pour importer tes données serait plutot :
system("mysql --host=**host** --user=**user** --password=**pass** **LabaseOVH** < ./Labase2.sql > ", $err2);

non ?
Dan
Pourquoi passer par une étape de décompression vers un fichier ???

Essaye plutôt directement:
CODE
system("zcat Labase.sql.gz | mysql --host=**host** --user=**user** --password=**pass** **LabaseOVH**");
Bourinho
Bonjour à tous,

Voila le fichier php que j'ai utilisé (je le met pour être sûr de la syntaxe, ça n'était peut être pas clair...)
CODE
<?php
$fichiergz='***.sql';
$host='***';
$user='***';
$password='***';
$labaseOVH='***';
echo "Votre base est en cours de restauration......<br>";
echo system('zcat '.$fichiergz.'.gz | mysql --host='.$host.' --user='.$user.' --password='.$password.' '.$labaseOVH,$err);
echo "<br>".$err;
echo "<br>C'est fini. Votre base est en place sur cet hébergement.";
?>


Voilà ce que j'obtiens à l'affichage de la page:
CITATION
Votre base est en cours de restauration......

1
C'est fini. Votre base est en place sur cet hébergement.


Ca semble plutôt bon signe...

Le seul problème, c'est que quand je vais sur phpMyAdmin, il n'y a rien!

Il est où le problème? unsure.gif

Merci pour votre aide!
Jeromnimo
As-tu essayé avec la commande que je t'ai donné ?
Au lieu de faire un pipe ('|' entre zcat et mysql) essaye avec une redirection de flux ('<')
Dan
Pas de redirection (> ou <) entre deux commandes !

Je maintiens qu'entre zcat et mysql il FAUT un pipe....
zcat écrit sur stdout, et mysql lit le stdin. Donc le pipe | est ce qu'il faut !
Bourinho
Salut et merci Jeromnimo....d'avoir essayer wink.gif

Voilà ce que cela me donne sur la page:
CITATION
Votre base est en cours de restauration......

2
C'est fini. Votre base est en place sur cet hébergement.


avec le fichier php suivant :
CODE
<?php
$fichiersql='***.sql';
$host='***';
$user='***';
$password='***';
$labaseOVH='***';
echo "Votre base est en cours de restauration......<br>";
echo system('mysql --host='.$host.' --user='.$user.' --password='.$password.' '.$labaseOVH.' <./'.$fichiersql.'>',$err);
echo "<br>".$err;
echo "<br>C'est fini. Votre base est en place sur cet hébergement.";
?>


A priori, le $err est plus élevé avec ta solution...c'est mieux?

Mais je n'ai toujours rien sous phpMyAdmin (j'utilise celui d'ovh sur h**p://start.ovh.net/...)

Merci pour votre aide et je pense que l'on devrait y arriver!!! Enfin, j'espère whistling.gif

[Edit]
Voilà le fichier base.sql que j'utilise
CITATION
-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Jeudi 19 Octobre 2006 à 00:46
-- Version du serveur: 4.1.9
-- Version de PHP: 4.3.10
--
-- Base de données: `prv`
--

-- --------------------------------------------------------

--
-- Structure de la table `departements`
--

DROP TABLE IF EXISTS `departements`;
CREATE TABLE `departements` (
`Numero` int(2) NOT NULL default '0',
`Nom` varchar(30) NOT NULL default '',
PRIMARY KEY (`Numero`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;

--
-- Contenu de la table `departements`
--

INSERT INTO `departements` VALUES (1, 'AIN');
INSERT INTO `departements` VALUES (2, 'AISNE');
INSERT INTO `departements` VALUES (3, 'ALLIER');


Et j'ai essayé en utilisant "use MaBaseOVH;" au début de ce fichier...
Dan
Plutôt que de faire:
CODE
system("mysql --host=**host** --user=**user** --password=**pass** **LabaseOVH** < ./Labase2.sql > ", $err2);

essaie de faire
CODE
die("mysql --host=**host** --user=**user** --password=**pass** **LabaseOVH** < ./Labase2.sql > ");

et dis nous précisément ce que tu obtiens (en effaçant le mot de passe)

Ca ne lancera pas la commande, mais cela permettra de voir ce que tu envoies !
Peut-être faut-il mettre le chemin complet vers 'zcat' et 'mysql'.

Dan
Jeromnimo
CITATION
Pas de redirection (> ou <) entre deux commandes !

Je maintiens qu'entre zcat et mysql il FAUT un pipe....
zcat écrit sur stdout, et mysql lit le stdin. Donc le pipe | est ce qu'il faut !


Bien vu ;-) mais dans ma solution, y'a ni cat, ni zcat :-P
Dan
CITATION(Jeromnimo @ jeudi 19 octobre 2006, 15h01) *
Bien vu ;-) mais dans ma solution, y'a ni cat, ni zcat :-P

Alors c'est que tu t'es mal exprimé whistling.gif
CITATION(Jeromnimo @ jeudi 19 octobre 2006, 14h31) *
As-tu essayé avec la commande que je t'ai donné ?
Au lieu de faire un pipe ('|' entre zcat et mysql) essaye avec une redirection de flux ('<')
Jeromnimo
Mea culpa happy.gif
J'aurais dû être plus explicite...

Enfin bref, le principal c'est de trouver une solution pour Bourinho

@ Bourinho : dans ton fichier sql tu n'as pas de requete de selection de base ou autre qui pourrait empecher d'executer correctement l'ensemble du fichier (du genre SELECT DATABASE) ? L'uitlisateur que tu utilises a bien tous les droits nécessaires ?
Bourinho
Je redonne le fichier que j'utilise pour faire ce test :
CITATION
-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Jeudi 19 Octobre 2006 à 00:46
-- Version du serveur: 4.1.9
-- Version de PHP: 4.3.10
--
-- Base de données: `prv`
--

-- --------------------------------------------------------

--
-- Structure de la table `departements`
--

DROP TABLE IF EXISTS `departements`;
CREATE TABLE `departements` (
`Numero` int(2) NOT NULL default '0',
`Nom` varchar(30) NOT NULL default '',
PRIMARY KEY (`Numero`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;

--
-- Contenu de la table `departements`
--

INSERT INTO `departements` VALUES (1, 'AIN');
INSERT INTO `departements` VALUES (2, 'AISNE');
INSERT INTO `departements` VALUES (3, 'ALLIER');


avec "use MaBaseOVH;" au début et sans (comme c'est dit dans le tuto d'OVH...)

et l'utilisateur que j'utilise correspond à ce qui m'a été donné par OVH... avec le password et le host fournis à la même occasion...
Jeromnimo
oki, et quand tu fais un copier-coller de la requete sous phpmuadmin (la premiere par exemple, la création de la table départements), elle passe bien ? tu te fais pas jeter à cause des droits ?

Je connais pas OVH, donc pour ça je laisse Dan répondre happy.gif
Dan
CITATION(Jeromnimo @ jeudi 19 octobre 2006, 15h17) *
Je connais pas OVH, donc pour ça je laisse Dan répondre happy.gif

Moi je connais OVH, mais surtout les serveurs dédiés. laugh.gif
J'attends toujours que Bourinho nous donne l'affichage généré par le die() ....
Bourinho
Merci à tous pour votre aide... (Ca va tellement vite que j'ai du mal à suivre wink.gif )

vec le fichier php suivant :
CODE
<?php
$fichiersql='prendrer007.sql';
$host='sql';
$user='prendrer007';
$password='***';
$labaseOVH='prendrer007';
echo "Votre base est en cours de restauration......<br>";
die('mysql --host='.$host.' --user='.$user.' --password='.$password.' '.$labaseOVH.' < ./'.$fichiersql.' >');
echo "<br>".$err;
echo "<br>C'est fini. Votre base est en place sur cet hébergement.";
?>


J'obtiens :
CITATION
Votre base est en cours de restauration......
mysql --host=sql --user=prendrer007 --password=*** prendrer007 < ./prendrer007.sql >


Voilà...
Jeromnimo
C'est quoi le '>' qui traine a la fin de la commande ????
Bourinho
Il vient de là :

CITATION(Dan @ jeudi 19 octobre 2006, 14h56) *
essaie de faire
CODE
die("mysql --host=**host** --user=**user** --password=**pass** **LabaseOVH** < ./Labase2.sql > ");

et dis nous précisément ce que tu obtiens (en effaçant le mot de passe)


Il faut l'enlever??? unsure.gif
Jeromnimo
Oui il vaudrait mieux... j'ai relu le topic, c'est de ma faute, c'est moi le premier à l'avoir mis, je ne sais pas pourquoi d'ailleurs... ????
Bourinho
Salut,

Quand j'enlève le '>' à la fin, je passe de
CITATION
Votre base est en cours de restauration......

2
C'est fini. Votre base est en place sur cet hébergement.

à
CITATION
Votre base est en cours de restauration......

1
C'est fini. Votre base est en place sur cet hébergement.


Il n'y a que le $err qui passe de 2 à 1...
Jeromnimo
Oui, je pense que c'est parce que la redirection vers "rien" (le '>' final) donnait un code de retour 2 , alors que ton script retourne un code 1...

Par contre j'arrive pas a trouver les codes de retour de la commande 'mysql'...

TU as essayé la requete dans phpmyadmin ?
Bourinho
Salut,

Je pense qu'on est sur une piste...

Voilà ce que me retourne phpMyAdmin :
CITATION
requête SQL:

CREATE TABLE `departements` (
`Numero` int( 2 ) NOT NULL default '0',
`Nom` varchar( 30 ) NOT NULL default '',
PRIMARY KEY ( `Numero` )
) ENGINE = MYISAM DEFAULT CHARSET = utf8 PACK_KEYS =0;

MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DEFAULT CHARSET=utf8 PACK_KEYS=0' at line 5


avec le fichier suivant :
CITATION
-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Jeudi 19 Octobre 2006 à 00:46
-- Version du serveur: 4.1.9
-- Version de PHP: 4.3.10
--
-- Base de données: `prv`
--

-- --------------------------------------------------------

--
-- Structure de la table `departements`
--

DROP TABLE IF EXISTS `departements`;
CREATE TABLE `departements` (
`Numero` int(2) NOT NULL default '0',
`Nom` varchar(30) NOT NULL default '',
PRIMARY KEY (`Numero`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;

--
-- Contenu de la table `departements`
--

INSERT INTO `departements` VALUES (1, 'AIN');
INSERT INTO `departements` VALUES (2, 'AISNE');
INSERT INTO `departements` VALUES (3, 'ALLIER');


C'est peut être un soucis de compatibilité entre mon PhpMyAdmin (v. 2.6.1) et celui d'OVH (v. 2.8.2.4)...non?
Jeromnimo
D'apres la doc de mysql, ça sert à déterminer quel comportement doit être utilisé pour compresser les différents types de clés...
http://dev.mysql.com/doc/refman/5.0/fr/create-table.html

Quelle est la version du serveur mysql chez OVH ?
Bourinho
C'est indiqué :
CITATION
Version du client MySQL: 5.0.18


[Edit]
C'est aussi marqué :
CITATION
MySQL - 4.0.25-standard-log
Jeromnimo
Peut etre une réponse possible ? Apparement ca recoupe bien ton problème...
http://forum.textpattern.com/viewtopic.php?id=14360
Bourinho
Merci pour le lien, ça va certainement m'aider...

Le truc qu'est rigolo, c'est que je peux importer ma "petite" base lorsque j'enlève le 'DEFAULT' devant CHARSET... C'est vraiment bizarre!!!

Je vais étudier ton lien plus profondément pour m'en sortir plus proprement!

Merci encore!
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.