OVH Community, votre nouvel espace communautaire.

Export puis import Mysql - php


Gaston_Phone
05/12/2011, 13h01
Bonjour jaaf64,

Je retiens tes remarques pour $commande, mais je trouve totalement inutile les "\"localhost\"".

Sauf si les noms comportent des espaces, ce qui est (à mon humble avis) une grave erreur.

jaaf64
05/12/2011, 09h53
Bonjour,

Nous sommes bien longtemps après le début de cette discussion. J'ai réussi à appliquer mais j'ai ramé, ramé. En tout cas merci beaucoup.
Je ne sais pas en quoi Gaston a corrigé ses scripts car on ne les voit pas, mais je me dois de retourner mon expérience car il y a des tas de fautes de syntaxe dans les exemples montrés au début.
Comme on dit :« l'enfer est pavé de bonnes intentions et les difficultés se nichent dans les détails ».

Voici donc mes scripts qui marchent, ici sur un serveur local.

Sauvegarde

Les erreurs étaient essentiellement sur les enchaînements de strings et de variables c'est à dire "string1".$var."string2".$var2 etc...

Code:
\"localhost\""; // Nom du serveur MySQL.  ex. mysql5-26.perso 
   $db_name           = "drupal"; // Nom de la base Attention pus de \" ici 
   $db_username       = "\"root\""; // Nom de la base de données.  ex. mabase 
   $db_password       = "\"389swibltn\""; // Mot de passe de la base de données. 

   $cmd_mysql = "mysqldump"; 
echo "
Document root is ".$_SERVER['DOCUMENT_ROOT']; $archive_GZIP = $_SERVER['DOCUMENT_ROOT']."/sauve_base_format_gzip.gz"; echo " Sauvegarde de la base $db_name par mysqldump dans le fichier $archive_GZIP
\n"; $commande = $cmd_mysql." --host=".$db_server." --user=".$db_username." --password=".$db_password." -C -Q -e --default-character-set=$db_charset ".$db_name." | gzip -c > ".$archive_GZIP ; //ça ne mange pas de pain et ça permet de voir la commande qui est finalement générée echo $commande; $CR_exec = system($commande); ?>

Restauration après création de la base

Code:
 Attention ici pas de double quote
   $db_username       = "\"root\""; // Nom de la base de données.  ex. mabase 
   $db_password       = "\"389swibltn\""; // Mot d epasse de la base de données. 

   $cmd_mysql = "mysql"; 

   
$archive_GZIP      = "sauve_base_format_gzip.gz"; 

   if (!is_file($archive_GZIP))   echo "Le fichier ".$archive_GZIP." n'existe pas  
\n"; echo " Restauration de la base $db_name par mysql depuis le fichier $archive_GZIP
\n"; $commande = "gzip -d < ".$archive_GZIP." | ".$cmd_mysql." --host=".$db_server." --user=".$db_username." --password=".$db_password." ".$db_name; //ça ne mange pas de pain et ça permet de voir la commande qui est finalement générée echo $commande; $CR_exec = system($commande); ?>
En espérant avoir rendu service à quelqu'un.

Michel Biland
08/04/2011, 16h24
Merci

Gaston_Phone
08/04/2011, 16h18
Bonjour Michel,
Suite à tes difficultés, j'ai modifié la présentation de mes scripts.

Michel Biland
08/04/2011, 16h03
Avec toutes mes excuses et mes remerciements

Bonne journée

Gaston_Phone
08/04/2011, 15h38
En effet.

Michel Biland
08/04/2011, 14h57
J'ai trouvé mon erreur

Merci à tous (erreur au niveau du fichier connexion ; une erreur idiote = j'avais mis $DomaineB au lieu de $ServeurB)

Michel Biland
08/04/2011, 14h46
C'est en cours

Gaston_Phone
08/04/2011, 14h29
As-tu essayé mes scripts ?

Michel Biland
08/04/2011, 14h21
Citation Envoyé par Daniel60
La base "B" est-elle initialement créée ?
Oui et elle est dans le même dossier

J'arrive à l'importer à la main, en local comme en ligne

Mais le but est de le faire par programmation : je fais ces tests sur une base Mysql de 750 Ko mais le but final sera d'importer une base de 300 Mo (une grosse base autorisée dans mon Plan). Or un import de 300 Mo est impossible avec phpMyAdmin.

Gaston_Phone
08/04/2011, 14h11
Soyons prétentieux dans nos conseils!

Avec l'aimable autorisation de sfk, une piste :

Comment faire un Backup/Restor de mes bases de données MUTUALISEES ?
-------------------------------------------------------------------------------

Bonjour, j'utilise le format GZIP.

Dans un script PHP je mets :

Sauvegarde GZIP - Toutes les tables :

Code PHP:
   error_reporting(E_ALL); // Activer le rapport d'erreurs PHP

   
$db_charset "latin1"/* mettre utf8 ou latin1 */

   
$db_server         "xxxxxx"// Nom du serveur MySQL.  ex. mysql5-26.perso
   
$db_name           "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_username       "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_password       "xxxxxx"// Mot d epasse de la base de données.

   
$cmd_mysql "mysqldump";

   
$archive_GZIP      "sauve_base_format_gzip.gz";

   echo 
" Sauvegarde de la base $db_name par mysqldump dans le fichier 
$archive_GZIP 
 \n";
   
$commande $cmd_mysql." --host=$db_server --user=$db_username --password=$db_password -C -Q -e --default-character-set=$db_charset  $db_name    | gzip -c > $archive_GZIP ";
   
$CR_exec system($commande);
?>
Sauvegarde GZIP - quelques tables :

Code PHP:
   error_reporting(E_ALL); // Activer le rapport d'erreurs PHP

   
$db_charset "latin1"/* mettre utf8 ou latin1 */

   
$db_server         "xxxxxx"// Nom du serveur MySQL.  ex. mysql5-26.perso
   
$db_name           "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_username       "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_password       "xxxxxx"// Mot d epasse de la base de données.

   
$cmd_mysql "mysqldump";

   
$archive_GZIP      "sauve_base_format_gzip.gz";

   
$Liste_tables_a_sauvegarder " Table1 Table2 Table3 Table4 Table5 ... ";

   echo 
" Sauvegarde de la base $db_name par mysqldump dans le fichier 
$archive_GZIP 
 \n";
   
$commande $cmd_mysql." --host=$db_server --user=$db_username --password=$db_password -C -Q -e --default-character-set=$db_charset  $db_name  $Liste_tables_a_sauvegarder  | gzip -c > $archive_GZIP ";
   
$CR_exec system($commande);
?>

Sauvegarde GZIP - sauve tables avec liste tables à exclure :

Code PHP:
   error_reporting(E_ALL); // Activer le rapport d'erreurs PHP

   
$db_charset "latin1"/* mettre utf8 ou latin1 */

   
$db_server         "xxxxxx"// Nom du serveur MySQL.  ex. mysql5-26.perso
   
$db_name           "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_username       "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_password       "xxxxxx"// Mot d epasse de la base de données.

   
$cmd_mysql "mysqldump";

   
$archive_GZIP      "sauve_base_format_gzip.gz";

   
$Prefixe_tables_a_exclure " --ignore-table=".$db_name.".jomla1_";

   echo 
" Sauvegarde de la base $db_name par mysqldump dans le fichier 
$archive_GZIP 
 \n";
   
$commande $cmd_mysql." --host=$db_server --user=$db_username --password=$db_password -C -Q -e --default-character-set=$db_charset  $db_name  $Prefixe_tables_a_exclure  | gzip -c > $archive_GZIP ";
   
$CR_exec system($commande);
?>

Restauration GZIP
Code PHP:
   error_reporting(E_ALL); // Activer le rapport d'erreurs PHP

   
$db_charset "latin1"/* mettre utf8 ou latin1 */

   
$db_server         "xxxxxx"// Nom du serveur MySQL.  ex. mysql5-26.perso
   
$db_name           "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_username       "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_password       "xxxxxx"// Mot d epasse de la base de données.

   
$cmd_mysql "mysql";

   
$archive_GZIP      "sauve_base_format_gzip.gz";

   if (!
is_file($archive_GZIP))   echo "Le fichier ".$archive_GZIP." n'existe pas  
 \n"
;

   echo 
" Restauration de la base $db_name par mysql depuis le fichier $archive_GZIP 
 \n";
   
$commande "gzip -d < $archive_GZIP | $cmd_mysql --host=$db_server  --user=$db_username --password=$db_password $db_name";
   
$CR_exec system($commande); 
?>
Restauration SQL
Code PHP:
   error_reporting(E_ALL); // Activer le rapport d'erreurs PHP

   
$db_charset "latin1"/* mettre utf8 ou latin1 */

   
$db_server         "xxxxxx"// Nom du serveur MySQL.  ex. mysql5-26.perso
   
$db_name           "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_username       "xxxxxx"// Nom de la base de données.  ex. mabase
   
$db_password       "xxxxxx"// Mot d epasse de la base de données.

   
$cmd_mysql "mysql";

   
$archive_SQL      "Sauve_Base.SQL";

   if (!
is_file($archive_SQL))   echo "Le fichier ".$archive_SQL." n'existe pas  
 \n"
;

   echo 
" Restauration de la base $db_name par mysql depuis le fichier $archive_SQL 
 \n";
   
$commande "$cmd_mysql --host=$db_server  --user=$db_username --password=$db_password $db_name  < $archive_SQL";
   
$CR_exec system($commande); 
?>

Analyse :
Pour la partie sauvegarde pas de risque.
Pour la partie restauration, s'assurer au préalable que la sauvegarde est correcte :
  • Transfert de la sauvegarde sur ton micro,
  • Dé-zippe le fichier sauvegarde,
  • Ouvre avec NOTEPAD.EXE le fichier extrait.


Le fichier extrait doit avoir une taille conséquente et commencer par quelque chose qui ressemble à :

-- MySQL dump 10.13 Distrib 5.1.35, for Win32 (ia32)
--
-- Host: localhost Database: YYY
-- ------------------------------------------------------
-- Server version 5.1.35-community

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `tbl_adresses`
--

DROP TABLE IF EXISTS `Table_xxx`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `Table_xxx` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
...
`DER` varchar(3) NOT NULL DEFAULT '',
PRIMARY KEY (`Id`),
KEY `Id` (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=2561 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `Table_xxx`
--

LOCK TABLES `Table_xxx` WRITE;

Daniel60
08/04/2011, 14h04
La base "B" est-elle initialement créée ?

Michel Biland
08/04/2011, 13h37
J'arrive bien à faire un export d'une base Mysql, mais je veux ensuite la copier sur une autre base et j'échoue

EXPORT


require_once('connexion.php');

echo "Votre base".$NomBaseA." est en cours de sauvegarde.......";

system("mysqldump --host=".$ServeurA." --user=". $UtilisateurA." --password=".$MotPasseA." ".$NomBaseA." > ".$NomBaseA.".sql");

echo "
C'est fini. Vous pouvez récupérer la base ".$NomBaseA." par FTP";

system("gzip ".$NomBaseA.".sql");

echo "
Compression du fichier..... : ".$NomBaseA.".sql.gz";

?>


IMPORT


system("gunzip ".$NomBaseA.".sql.gz");

echo "Votre base ".$NomBaseA." est en cours de copie sur ".$NomBaseB."
";

system("cat ".$NomBaseA.".sql | mysql --host=".$ServeurB." --user=".$UtilisateurB." --password=".$MotPasseB." ".$NomBaseB."");

echo "C'est fini. Votre base est en place sur cet hébergement.";

?>
__________________