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.
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...Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54815698 bytes) in /var/www/clients.....
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);
Partager