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);