1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    février 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : février 2012
    Messages : 9
    Points : 6
    Points
    6

    Par défaut Sauvegarde de la table d'un PC à un autre via le réseau

    Bonjour,

    Je suis débutant dans le domaine et j'ai une question concernant ma gestion de sauvegarde de base de données.

    J'ai cherché à propos de ce sujet toute la journée d'hier mais je ne trouve pas de réponse exact à ma question.
    J'ai mis en place 1 Raspberry Pi avec un LAMP qui me sert d'ordinateur pour acquérir des données à un endroit.
    J'ai sur mon PC fixe un Wamp.
    J'aimerai pouvoir faire une sauvegarde journalière d'une table de mon Raspberry Pi vers mon PC fixe via le réseau et pouvoir l'exploiter aussi en cas de besoin.
    J'aimerai que tout cela se fasse en automatique si possible (via une page php, ...)

    Comment puis je faire ?

    Je vous remercie

    Aurélien

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    juillet 2005
    Messages
    28 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juillet 2005
    Messages : 28 635
    Points : 42 564
    Points
    42 564

    Par défaut

    Si le raspberry accède à un repertoire partagé du poste fixe, tu as simplement besoin d'un script sur le raspberry qui execute un mysqldump et copie la sauvegarde vers ce repertoire.
    Plutôt que PHP, ça serait plutôt un script bash qui ferait l'affaire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    février 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : février 2012
    Messages : 9
    Points : 6
    Points
    6

    Par défaut

    Bonjour,

    Merci pour la réponse, mais malheureusement il n'y a pas de répertoire partagé entre le raspberry et le PC.
    Y a t il un autre moyen ?

    Aurélien

  4. #4
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 2 979
    Points : 9 078
    Points
    9 078

    Par défaut

    Salut Ragnan.

    Je crois que vous avez déjà posé la même question dans le forum consacré à WampServer sous le pseudo d'aurélien.
    Otomatic vous avait dit que vous étiez hors sujet car cela ne concerne pas l'installation et la configuration de WampServer.

    Citation Envoyé par Ragnan
    Comment puis je faire ?
    C'est très simple. Vous vous connectez à votre base de données distante et vous envoyez votre requête d'insertion !
    Comme vous êtes dans votre réseau local, vous n'avez pas en principe de déclarative à faire dans votre box/routeur.
    Il vous faut par contre, ouvrir dans votre SGBDR MySql un compte qui pourra recevoir des accès extérieurs à l'ordinateur qui héberge votre serveur MySql.

    Quel est le langage que vous allez utiliser sous votre Raspberry ?
    Php ? Python ? Bash ?

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    février 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : février 2012
    Messages : 9
    Points : 6
    Points
    6

    Par défaut

    Bonjour,

    Je vous remercie de votre réponse.
    En effet, c'est bien moi.

    J'ai accès à la base depuis le PC Fixe.
    Le Raspberry utilise des pages php comme formulaire pour remplir le LAMP.

    Existe t il un protocole pour "remplacer" la table de sauvegarde de mon PC fixe en "copiant" la table du Raspberry ? (sans utiliser de transfert de fichier)

    Merci

  6. #6
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 2 979
    Points : 9 078
    Points
    9 078

    Par défaut

    Salut Ragnan.

    Citation Envoyé par Ragnan
    Existe t il un protocole pour "remplacer" la table de sauvegarde de mon PC fixe en "copiant" la table du Raspberry ? (sans utiliser de transfert de fichier)
    Est-ce le transfert du fichier SQL contenant le déchargement de votre table par la commande "mysqldump" ?

    Dans mon message précédent, je ne vous parle pas d'un transfert de fichier, mais d'une prise de contrôle à distance.
    Le port utilisé est le 3306 : https://www.speedguide.net/port.php?port=3306 Il est entièrement consacré à MySql.
    Ce port doit être ouvert dans votre réseau local, ce qui à mon avis est le cas !

    Depuis votre raspberry, vous créez un script php qui va réaliser ce transfert :
    --> connexion (1) vers votre base de données distante.
    --> connexion (2) vers votre base de données locale.

    --> vous extrayez la totalité de votre table de la connexion 2.
    --> vous envoyez vers la connexion (1) sous forme d'insertion la totalité de votre table.

    --> vous fermez la connexion (1).
    --> vous fermez la connexion (2).

    Ce qui donne pour une connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
    /*-----------------------------------------------------*/
    /* Informations pour la connexion à la base de données */
    /*-----------------------------------------------------*/
     
    $nom_du_serveur  = "mysql:host=localhost;dbname=test";
    $nom_utilisateur = "test";
    $mot_de_passe    = "test";
     
    $options         = array(
    	PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES latin1",
    	PDO::ATTR_CASE               => PDO::CASE_LOWER,
    	PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    	PDO::ATTR_PERSISTENT         => false
    );
     
    /*----------------------*/
    /* Connexion au Serveur */
    /*----------------------*/
     
    try {
    	$link = new PDO($nom_du_serveur, $nom_utilisateur, $mot_de_passe, $options);
    }
    catch (Exception $e)
    {
    	echo "Connection à MySql impossible : ", $e->getMessage();
    	die();
    }
    ?>
    Ici le mot clef est "$link" qui va déterminer la connexion.
    Pour l'autre connexion, vous pouvez la nommer "$dist" comme connexion distante.

    Pour le vidage de votre table, il faut imbriquer les deux connexions comme ci-après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?php
    /*------------------------------*/
    /* Vidage de la table 'clients' */
    /*------------------------------*/
     
    $req = "SELECT * FROM tab_clients";
     
    try {
    	$sql  = $link->query($req);
     
    	while ($enreg = $sql->fetch(PDO::FETCH_OBJ))
    	{
     
    		/*--------------------*/
    		/* Mode Transactionel */
    		/*--------------------*/
     
    		$dist->beginTransaction();
     
    		/*-----------------------------------*/
    		/* Insertion dans la table "clients" */
    		/*-----------------------------------*/
     
    		try {
    			$ins = $dist->prepare("INSERT INTO `tab_clients` (`nom`, `prenom`, `naissance`, `ville`, `datenreg`) VALUES (:param1, :param2, :param3, :param4, :param5)");
     
    			$ins->bindParam('param1', $enreg->nom);
    			$ins->bindParam('param2', $enreg->prenom);
    			$ins->bindParam('param3', $enreg->naissance);
    			$ins->bindParam('param4', $enreg->ville);
    			$ins->bindParam('param5', $enreg->datenreg);
     
    			$ins->execute();
    		}
    		catch ( Exception $e )
    		{
    			$dist->rollback();
    			echo "Une erreur est survenue dans la requête insert : ", $e->getMessage();
    			die();
    		}
    		$dist->commit();
    	}
    	$sql->closeCursor();
    }
    catch ( Exception $e )
    {
    	echo "Une erreur est survenue dans la requête select : ", $e->getMessage();
    	die();
    }
    ?>
    Pour la fermeture de la connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    /*-------------*/
    /* Déconnexion */
    /*-------------*/
     
    $link = null;
     
    ?>
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    février 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : février 2012
    Messages : 9
    Points : 6
    Points
    6

    Par défaut Résolu

    Merci beaucoup,

    Je viens de tester et ça marche comme il faut.
    J'ai juste du retirer la variable $option sinon il me copiait des valeurs "NULL" dans ma table de destination (un problème de configuration je pense, je me pencherai sur le problème bientôt).

    Merci encore



    Aurélien

  8. #8
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 2 979
    Points : 9 078
    Points
    9 078

    Par défaut

    Salut Ragnan.

    Comme vous avez pu le constater, les variables php "$link" pour la connexion en local et "$dist" pour la connexion distante résolvent votre problème.
    Je ne sais pas trop si l'on peut faire autrement, sachant que les deux bases de données ne se trouvent pas sur le même serveur.
    Si quelqu'un passant par là sait comment gérer des bases de données ne se trouvant pas sur le même serveur, je suis preneur !

    Mais si la base de données est sur le même serveur, c'est beaucoup plus simple à faire. Voici l'exemple d'un script mysql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
     
    -- ======================
    -- Base de Données `base1`
    -- ======================
     
    DROP DATABASE IF EXISTS `base1`;
     
    CREATE DATABASE `base1`
    	DEFAULT CHARACTER SET `latin1`
    	DEFAULT COLLATE       `latin1_general_ci`;
     
    USE `base1`;
     
    -- ==============
    -- Table `depart`
    -- ==============
     
    DROP TABLE IF EXISTS `depart`;
     
    CREATE TABLE `depart`
    ( `id`   integer unsigned  NOT NULL auto_increment primary key,
      `val`  char(10)          NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
     
    -- =======================
    -- Insertion dans `depart`
    -- =======================
     
    INSERT INTO `depart` (`val`) VALUES ('un'),('deux'),('trois'),('quatre'),('cinq');
     
    -- ==================
    -- Vidage de `depart`
    -- ==================
     
    select * from depart;
     
    -- =======================
    -- Base de Données `base2`
    -- =======================
     
    DROP DATABASE IF EXISTS `base2`;
     
    CREATE DATABASE `base2`
    	DEFAULT CHARACTER SET `latin1`
    	DEFAULT COLLATE       `latin1_general_ci`;
     
    USE `base2`;
     
    -- ============
    -- Table `lien`
    -- ============
     
    DROP TABLE IF EXISTS `lien`;
     
    CREATE TABLE `lien`
    ( `rang`   integer unsigned  NOT NULL primary key
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
     
    -- =====================
    -- Insertion dans `lien`
    -- =====================
     
    INSERT INTO `lien` (`rang`) VALUES (2),(5);
     
    -- ================
    -- Vidage de `lien`
    -- ================
     
    select * from lien;
     
    -- ==============
    -- Table `arrive`
    -- ==============
     
    DROP TABLE IF EXISTS `arrive`;
     
    CREATE TABLE `arrive`
    ( `num`  integer unsigned  NOT NULL primary key,
      `lib`  char(10)          NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
     
    -- =======
    -- Requête
    -- =======
     
    insert into base2.arrive (`num`,`lib`)
      select tb1.id, tb1.val
      from       base1.depart as tb1
      inner join base2.lien   as tb2
      on tb2.rang = tb1.id;
     
    -- ==================
    -- Vidage de `arrive`
    -- ==================
     
    select * from arrive;
     
    -- ================================
    -- Suppression des bases de données
    -- ================================
     
    DROP DATABASE IF EXISTS `base1`;
    DROP DATABASE IF EXISTS `base2`;
     
    -- ===
    -- Fin
    -- ===
     
    COMMIT;
    SET AUTOCOMMIT = 1;
    Voir la requête où j'ai mis le commentaire "requête".

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sauvegarde d'une table temporaire
    Par LDDL dans le forum Administration
    Réponses: 2
    Dernier message: 31/05/2007, 13h55
  2. [Conception]sauvegarde d'une table
    Par moicats dans le forum Access
    Réponses: 5
    Dernier message: 30/03/2007, 15h55
  3. [SGBD][VB.NET]Sauvegarde d'une table
    Par Franck2mars dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/01/2007, 18h18
  4. Sauvegarder / restaurer une table
    Par weed dans le forum Administration
    Réponses: 2
    Dernier message: 21/11/2006, 21h47
  5. Sauvegarde d'une table de la BD
    Par Looping_V60 dans le forum Access
    Réponses: 2
    Dernier message: 06/06/2006, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo