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.
Citation:
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:
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); |