IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Modif script de sauvegarde de base de donnée [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 139
    Par défaut Modif script de sauvegarde de base de donnée
    Bonjour,

    J'aurai besoin d'un coup de main pour modifier le script ci-dessous. En effet, il fonctionne très bien tel quel mais maintenant que ma base de données est devenue très importante, j'ai un message d'erreur qui apparait lorsque je lance ma sauvegarde.


    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54815698 bytes) in /var/www/clients.....
    Je voudrais pouvoir modifier le code de façon à "tronçonner" ma sauvegarde. Par exemple ne prendre que les 200 premières tables et faire un fichier de sauvegarde, puis prendre les tables 201 à 400, etc...

    Je vous remercie de votre aide car là, je sèche.

    Voici le code utilisé:

    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
    function mysql_structure() {
        $host = 'xxx.xxx.xxx.xxx';
        $user = 'xxxxxxxx';
        $pass = 'xxxxxxxx';
        $base = 'xxxxxxxx';
     
        // création d'un fichier affichant en boucle le contenu des tables de la base :
     
        $tables = mysql_list_tables($base);
        while ($donnees = mysql_fetch_array($tables))
        {
            $table = $donnees[0];
            $res = mysql_query("SHOW CREATE TABLE $table");
            if ($res)
            {
                $insertions = "";
                $tableau = mysql_fetch_array($res);
                $tableau[1] .= ";";
                $dumpsql[] = str_replace("\n", "", $tableau[1]);
                $req_table = mysql_query("SELECT * FROM $table");
                $nbr_champs = mysql_num_fields($req_table);
                while ($ligne = mysql_fetch_array($req_table))
                {
                    $insertions .= "INSERT INTO $table VALUES(";
                    for ($i=0; $i<=$nbr_champs-1; $i++)
                    {
                        $insertions .= "'" . mysql_real_escape_string($ligne[$i]) . "', ";
                    }
                    $insertions = substr($insertions, 0, -2);
                    $insertions .= ");\n";
                }
                if ($insertions != "")
                {
                    $dumpsql[] = $insertions;
                }
            }
        }
        return implode("\r", $dumpsql);
    }
    // création du fichier de dump sur le même niveau que ce fichier dump.php
     
    file_put_contents("sqldump_".date("d-n-Y").".sql", mysql_structure());
     
    // effacement du fichier precedant (créé 7 jours plus tot)
    $time_old = getdate(mktime()-(7*24*3600));
    $an = $time_old['year'];
    $mois = $time_old['mon'];
    $jour = $time_old['mday'];
     
    // formatage des jours à 1 chiffre
     
    for($k=1; $k<10; $k++)
    {
        if ($jour==$k)
        {
            $jour='0'.$jour;
        }
    }
    $date_old=$jour.'-'.$mois.'-'.$an;
    $file_old="sqldump_".$date_old.".sql";
    unlink($file_old);

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pourquoi tu n'utilises pas mysqldump ? C'est fait pour.
    Sinon pour ta solution de départ, il faut écrire ton fichier au fur et à mesure, ligne par ligne au lieu de placer l'intégralité de ta table dans une variable PHP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 139
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Pourquoi tu n'utilises pas mysqldump ? C'est fait pour.
    Je ne sais pas comment faire. J'ai bien chercher sur différents posts, mais je ne comprends pas les scripts. Mon niveau de PHP est plutôt bas

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si tu as accès au serveur, il y a un programme mysql "mysqldump" qui produit des sauvegardes.

    Sinon pour ta solution de départ, il faut écrire ton fichier au fur et à mesure, ligne par ligne au lieu de placer l'intégralité de ta table dans une variable PHP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 139
    Par défaut
    Je suis sur un serveur dédié, mais je ne sais pas comment accéder au programme mysqldump.

    Pour la solution de départ, je ne comprends pas ce que tu veux dire par "écrire mon fichier au fur et à mesure"??

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Regarde les fonctions fopen/fwrite ; l'idée est d'écrire le fichier dans ta boucle de lecture de la base de donnée.

    Pour mysqldump, il doit se trouver dans mysql/bin :
    http://jgrondin.developpez.com/artic...vegarde_MySQL/
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 415
    Par défaut
    Citation Envoyé par lumycaan Voir le message
    Pour la solution de départ, je ne comprends pas ce que tu veux dire par "écrire mon fichier au fur et à mesure"??
    Essaies avec fwrite

    EDIT Bon trop tard...

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

Discussions similaires

  1. Sauvegarder une Base de données Oracle 8
    Par benjamin50 dans le forum Administration
    Réponses: 7
    Dernier message: 16/06/2009, 11h36
  2. script de sauvegarde de base de données dans VB.net
    Par bathis_dev dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 07/02/2007, 12h16
  3. Problème de sauvegarde de bases de données
    Par Gwipi dans le forum Administration
    Réponses: 2
    Dernier message: 09/09/2005, 08h30
  4. Sauvegarde des bases de données
    Par dcollart dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 27/07/2005, 06h35
  5. Réponses: 3
    Dernier message: 24/10/2003, 21h46

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