Probleme dans utilisation sauvegarde

algal -  
zucrezel Messages postés 30 Statut Membre -
Bonjour,

mysql 5.5.20
J'ai un problème dans mes sauvegardes
voici l'ordre que j'utilise : je ne demande que les tables
mysqldump -h localhost -uUser -pPWD Nom_base --verbose --compress --tables > Nom_base_sauve .sql

lorsque je remonte la base, je m’aperçois qu'il me restaure certaines vues en tant que tables (pas toutes mais un nombre conséquent) ceci i a pour effet de rendre les vues de la base restaurée inutilisable (elles sont devenue des tables)

Une idée serait très bienvenue, merci d'avance

4 réponses

  1. zucrezel Messages postés 30 Statut Membre 4
     
    Bonjour,
    Et si tu ajoutes l'exclusion de chaque vue ?
    --ignore-table=view1 --ignore-table=view2 --ignore-table=view3
    0
    1. algal
       
      Merci de ta réponse, mais c'est trop fastidieux, j'ai plusieurs bases, avec chacune 150 à 200 vues, en plus la sauvegarde est en automatique dans un script linux et il faut penser aller modifier le script chaque fois qu'il y a une nouvelle vue. Je pourrais aussi nommer chaque table à sauvegarder mais c'est le même problème il faut penser à modifier le script chaque fois qu'il y a une nouvelle table ou si il y en a une qui disparaît (sinon erreur).
      L’idéal serait un script linux qui interroge la base pour avoir le nom des tables et qui fasse la sauvegarde. Comme ca je serais sur d'avoir une liste à jour. Mais je sais pas faire !
      0
  2. zucrezel Messages postés 30 Statut Membre 4
     
    Et avec du vieux code php qui va chercher les vues et qui les exclut avec --skip-triggers ?
    <?php
    
    if (is_array($argv) && count($argv)>3) {
        $database=$argv[1];
        $user=$argv[2];
        $password=$argv[3];
    }
    else {
        echo "Usage php mysqdump.php <database> <user> <password>\n";
        exit;
    }
    
    $link = mysql_connect('localhost', $user, $password);
    
    
    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }
    
    $source = mysql_select_db('$database', $link);
    $sql = "SHOW FULL TABLES IN `$database` WHERE TABLE_TYPE LIKE 'VIEW';";
    $result = mysql_query($sql);
    $views=array();
    while ($row = mysql_fetch_row($result)) {
       $views[]="--ignore-table={$database}.".$row[0];
    }
    //pas de vues ni de triggers
    echo passthru("mysqldump -u root --password=\"$password\" $database --skip-triggers ".implode(" ",$views));
    
    ?>
    0
  3. algal
     
    ah! ah! ça s'essaye excellente bonne idée !
    mais plutot lister les tables et oublier les vues non ?
    Merci
    0
  4. zucrezel Messages postés 30 Statut Membre 4
     
    oui à mon avis tu peux rechercher uniquement les tables puis tu les indiques dans --tables
    0