Page 1 sur 2

Synchronisation entre serveur

Posté : 05 nov. 2013, 22:25
par guigui69
Bonjour à tous,

J'ai environnement LAMP sous debian et des WAMP sous windows.
(mysql+phpmyadmin etc..)
Je voudrais mettre en place une "synchronisation" d'une seule base (environ 1000Ko) sur le serveur linux vers mes wamp windows (environ 10 PC) . Donc unidirectionnel du serveur linux vers les poste WAMP Windows (environ 10 PC).

C'est synchronisation devra etre se faire tout les jours (une fois par jour)
Est-il possible de réaliser ? avec phpmyadmin?

Merci d'avance

guigui69

Re: Synchronisation entre serveur

Posté : 06 nov. 2013, 02:38
par Sékiltoyai
Bonjour,

Est-ce de la production ? Quel est l'objectif de la réplication ?

Cordialement

Re: Synchronisation entre serveur

Posté : 07 nov. 2013, 22:14
par guigui69
En fait la base de donnée va servir uniquement en interne pour afficher ces informations sur un ecran de Télé.

C'est pour ca que j'ai besoin de cette synchro dnas un seul sens.

guigui69

Re: Synchronisation entre serveur

Posté : 08 nov. 2013, 22:08
par badabwé
Sous linux y a cron pour automatiser des tâches... La doc sous la distri qui te concerne:

http://www.admin-debian.com/gestion-des ... ous-linux/

Re: Synchronisation entre serveur

Posté : 08 nov. 2013, 23:32
par Sékiltoyai
Bonjour,

C'est en effet la solution que j'aurais suggéré:
* Exécution d'un script cron chargé d'exporter le contenu de base de données...
* ... puis de l'envoyer vers un script sur le poste Windows ...
* ... lequel réimporte la nouvelle base de données.
On peut également limiter les enregistrements à importer en plaçant un timestamp sur les enregistrement de base de données.

C'est de la synchronisation basique mais stable, et qui ne demande pas de compétences particulières dans l'administration d'une base de données.

Cordialement

Re: Synchronisation entre serveur

Posté : 18 nov. 2013, 16:08
par guigui69
Bonjour,

c'est sur quoi je suis partit par contre je bloque sur la dernière partie du serveur.
<?php
// Acces mysql server

$server="1****";
$user="****";
$pass="******";
$db="******";
mysql_connect($server,$user,$pass) or die('erreur de connexion0');
mysql_select_db($db) or die ('impossible de se connecter a la base0');
// chargement FICHIER  CONFIG

$sql0="SELECT * FROM `config` LIMIT 1";
$retour0 = mysql_query($sql0) or die('ERREUR SQL ! '.$sql0);
$field = mysql_num_fields($retour0);
$donnees0 = mysql_fetch_array($retour0);
		for ( $i = 0; $i < $field; $i++ ) 
		{
                  
       $_SESSION[mysql_field_name($retour0, $i)] = $donnees0[$i];
        }
		print_r($_SESSION);
		
		
//Connexion au FTP planevo FTP////////////////////////

$conn_id = ftp_connect($_SESSION["adresse_ftp"]);
$login_result = ftp_login($conn_id, $_SESSION["login_ftp"],$_SESSION["mdp_ftp"]);

//VERIFICATION DE LA CONNEXION//////////////////////
if ((!$conn_id) || (!$login_result)) {
        echo "<br/>La connexion FTP a échoué !<br>";
        echo "<br/>Tentative de connexion au serveur ".$_SESSION["adresse_ftp"]." pour l'utilisateur ".$_SESSION["login_ftp"]."";
        exit;
    } else {
        echo "<br/>Connexion au serveur ".$_SESSION["adresse_ftp"].", pour l'utilisateur ".$_SESSION["login_ftp"]." est ok";
    }

//CHARGEMENT  D'UN FICHIER stockvo + verification
$donwload = ftp_get($conn_id, $_SESSION["dossier_import"].$_SESSION["fichier_vo"], $_SESSION["dossier_ftp"].$_SESSION["fichier_vo"], FTP_BINARY); 
if (!$donwload) {
        echo "<br/>Le chargement FTP a échoué!";
    } else {
        echo "<br/>Chargement de ".$_SESSION["fichier_vo"]." vers ".$_SESSION["adresse_ftp"]." en tant que ".$_SESSION["dossier_import"]." ";
    }
//CHARGEMENT  D'UN FICHIER photovo + verification	
$donwload = ftp_get($conn_id, $_SESSION["dossier_import"].$_SESSION["fichier_photo_zip"], $_SESSION["dossier_ftp"].$_SESSION["fichier_photo_zip"], FTP_BINARY); 
if (!$donwload) {
        echo "<br/>Le chargement FTP a échoué!";
    } else {
        echo "<br/>Chargement de ".$_SESSION["fichier_photo_zip"]." vers ".$_SESSION["adresse_ftp"]." en tant que ".$_SESSION["dossier_import"] ."";
    }

	///////		//Decompression ZIP
	
	$zip = new ZipArchive;
if ($zip->open($_SESSION["dossier_import"].$_SESSION["fichier_photo_zip"]) === TRUE) {
    $zip->extractTo($_SESSION["dossier_import"]);
    $zip->close();
    echo '<br/> Decompression ok';
} else {
    echo '<br/> Decompression failed';
}


		
//Fonction PHP

function lire_csv($nom_fichier, $separateur =";"){
    $row = 0;
    $donnee = array();   
    $f = fopen ($nom_fichier,"r");
	//$f = str_replace ( '-', '_',$f) ;
    $taille = filesize($nom_fichier)+1;
    while ($donnee = fgetcsv($f, $taille, $separateur)) {
        $result[$row] =str_replace ( '\'', '_',$donnee);
        $row++;
    }
    fclose ($f);

    return $result;
}

function requete_insert($donnees_csv, $table){
    $insert = array();
    $i = 0;     
    while (list($key, $val) = @each($donnees_csv)){
/*On ajoute une valeur vide ' ' en début pour le champs d'auto-incrémentation  s'il existe, sinon enlever cette valeur*/
        //VALUES ' . implode(',', $values);  
		  if ($i>0){
            $insert[$i] = "INSERT into `".$table."` VALUES ('";
			$insert[$i] .= implode("','", $val);
			$insert[$i] .= "')";
                    
   }$i++;
        }      
    return $insert;
}

//////////////////
//vider la table SQL table 1 liste des VO

	$query0 = "TRUNCATE TABLE `".$_SESSION['table_vo']."`";
	$result = mysql_query($query0) or die('Erreur SQL !'. $query0.'<br />'.mysql_error());
/////////

//////////////////
//vider la table SQL table 2 liste des photos

	$query0 = "TRUNCATE TABLE `".$_SESSION['table_photo']."`";
	$result = mysql_query($query0) or die('Erreur SQL !'. $query0.'<br />'.mysql_error());
/////////////////////////////////////////////


/////////////// IMPORT DES VO //////////////



////////////// integration fichier en la base MYSQL

  $donnees = lire_csv($_SESSION["dossier_import"].$_SESSION["fichier_vo"]);
  $requetes= requete_insert($donnees, $_SESSION['table_vo']);
  foreach($requetes as $requete)
  {
//  echo $requete;
   $result = mysql_query($requete) or die('Erreur SQL !==>'. $requete.'<br />'.mysql_error());
  }
 
///////////////// integration fichier photo


  $donnees = lire_csv($_SESSION["dossier_import"].$_SESSION["fichier_photo"],"	");
  $requetes= requete_insert($donnees, $_SESSION['table_photo']);
  foreach($requetes as $requete)
  {
//  echo $requete;
   $result = mysql_query($requete) or die('Erreur SQL !==>'. $requete.'<br />'.mysql_error());
  }

ftp_close($conn_id);


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

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


// system($command);
ini_set(display_errors, 1); 
error_reporting(E_ALL); 
$commande = "mysqldump --host=$server --user=$user --password=$pass -C -Q -e --default-character-set=$db_charset  planetvo  > planetvo.sql ";
echo $commande;
system($commande);



?>
Je n'arrive pas en php à faire un DUMP, alors que si j’exécute la ligne directement dans le serveur (à travers putty) le dump se fait correctement.

Cela doit être un problème de droit mais je ne sais pas comment corriger cela

guigui69

Re: Synchronisation entre serveur

Posté : 18 nov. 2013, 20:57
par Nagol
Les SGBD ont des systèmes de master/slave qui font ça automatiquement, pas besoin de cron ou de coder normalement, juste un peu de doc devrait faire l'affaire.

Re: Synchronisation entre serveur

Posté : 18 nov. 2013, 21:43
par Sékiltoyai
Les SGBD ont des systèmes de master/slave qui font ça automatiquement, pas besoin de cron ou de coder normalement, juste un peu de doc devrait faire l'affaire.
Systèmes qui demandent des compétences d'administration. Dans ce cas là, seule une pseudo-réplication est nécessaire, je ne pense pas que guigui69 souhaite se farcir l'installation d'une réplication master-slave.

Re: Synchronisation entre serveur

Posté : 19 nov. 2013, 09:05
par guigui69
Bonjour,

Je pense qu'avec mon script je devrais arriver à trouver mon compte. Par contre je ne sais pas comment realiser le dump de ma base

guigui69

Re: Synchronisation entre serveur

Posté : 19 nov. 2013, 09:38
par Sékiltoyai
Bonjour,

Je ne comprend rien à la construction de ton script.

Tu peux réaliser l'opération de façon très simple avec un script bash sous linux:

Code : Tout sélectionner

#!/bin/bash datafile=$(mktemp --tmpdir=/tmp/ dataXXXXXX.sql) source_host="localhost" source_user="utilisateur" # Remplacer par le nom d'utilisateur source_pass="mot de passe" # Remplacer par le mot de passe source_base="base de données" # Remplacer par le nom de la base de données destination_host="192.168.1.5" # Remplacer par l'IP de la destination (PC Windows) destination_user="utilisateur" # Remplacer par le nom d'utilisateur destination_pass="mot de passe" # Remplacer par le mot de passe destination_base="base de données" # Remplacer par le nom de la base de données mysqldump --host=${source_host} --user=${source_user} --password=${source_pass} ${source_base} >${datafile} mysql --host=${destination_host} --user=${destination_user} --password=${destination_pass} ${destination_base} <${datafile}
Et tu actives sur ta base de données Windows la possibilité de se connecter depuis l'extérieur.

Cordialement

Re: Synchronisation entre serveur

Posté : 19 nov. 2013, 12:29
par guigui69
Depuis mon poste linux,

l’essai ceci:

root@GA-DEBIAN:/var/www/planetvo# mysql --host=10.11.7.189 --user=root --password=mmmmmm planetvo

Voici le retour: ERROR 1042 (HY000): Can't get hostname for your address

Comment corriger ce problème?

guigui69

Re: Synchronisation entre serveur

Posté : 19 nov. 2013, 12:42
par Sékiltoyai

Re: Synchronisation entre serveur

Posté : 19 nov. 2013, 18:38
par guigui69
Bonsoir à tous,

J'ai avancé sur mon script du coté "client".

Tout le script fonctionne sauf la restauration de la base depuis le script php.

Par contre si je directement cela dans la console Windows elle s’intègre sans problème
"C:\Program Files\UwAmp\bin\database\mysql-5.5.9\bin\mysql.exe" --host=127.0.0.1 --user=root --password=++++++++planetvo < "C:\Program Files\UwAmp\www\ecran\planetvo.sql"
J'ai essayé la commande system/exec shell_exec

cette ligne est la copie de ma ligne du script php

ou est mon erreur.?

guigui69

Re: Synchronisation entre serveur

Posté : 19 nov. 2013, 19:49
par guigui69
J'y suis arrivé mais je suis obligé de passer par un fichier bat.

Maintenant je cherche à réaliser la tache planifié sous windows (sous linux c'est deja fait) cat si je lance le script il me retourne ceci:

Fatal error: Call to undefined function mysql_connect() in C:\Program Files\UwAm
p\www\ecran\import-clientv2.php on line 30

Je ne vois pas comment faire


guigui69

Re: Synchronisation entre serveur

Posté : 21 nov. 2013, 10:56
par Nagol
Les SGBD ont des systèmes de master/slave qui font ça automatiquement, pas besoin de cron ou de coder normalement, juste un peu de doc devrait faire l'affaire.
Systèmes qui demandent des compétences d'administration. Dans ce cas là, seule une pseudo-réplication est nécessaire, je ne pense pas que guigui69 souhaite se farcir l'installation d'une réplication master-slave.
O o, c'est à la portée de n'importe qui, comme la plupart des tâches d'administration système d'ailleurs.