Exemple en partant du 14 avril 2009 :
- bd_2009-04-14.txt
- bd_2009-04-15.txt
- bd_2009-04-16.txt
- bd_2009-04-17.txt
- (...)
Voici le script
<?php/*
* Sauvegarde de la BD dans un fichier .txt
* et suppression de vieux sauvegarde + de 3 mois
*
* fichier a appeler dans un CRON a tout les jours
* ce script fait un fichier de sauvegarde sous le format bd_2009-04-14.txt
* un dump sql qui permet de refaire ne entier la base de données
*/
$repertoire_sav = "/votre/repertoire/de/sauvegarde";
$nom_bd = "Nom de votre BD";
include ("votre/repertoire/connexion.php"); // fichier de connexion PHP
//////// Supprimer vieux save /////////////////////////////////////////////////////
// trouver date d'il y a 3 mois
$date_vieux = mktime(0,0, 0, date('m') - 3, date('j') , date('Y'));
$date_vieux_trv = date('Y-m-d',$date_vieux);
$nom_vieux_save = "bd_$date_vieux_trv".".txt";
$vieux_save = "$repertoire_sav/$nom_vieux_save";
if (is_file($vieux_save))
{
unlink($vieux_save);
}
// fin supprimer vieux sauvegarde
///////////////////////////////////////////////////////////////////////////////
// faire sauvegarde
// ouverture du buffer
ob_start();
$table =""; $tb ="";
$date_sauvegarde = date('Y-m-d H:i:s');
$nom_save = "bd_";
$nom_save .= date('Y-m-d');
$nom_save .= ".txt";
$crlf="\n";
$strTableStructure = "Table structure for table";
$strDumpingData = "Dumping data for table";
print "# ---- BD: $nom_bd ------------------------------$crlf";
print "# ---- Date de la sauvegarde : $date_sauvegarde ----------------$crlf";
$tables = mysql_query("SHOW TABLES FROM YOUR_DATABASE");
$num_tables = @mysql_numrows($tables);
$i = 0;
// boucle toute les tables
while($i < $num_tables)
{
$table = mysql_tablename($tables, $i);
if ($tb) {
if ($table == $tb) {
print $crlf;
print "# --------------------------------------------------------$crlf";
print "#$crlf";
print "# $strTableStructure '$table'$crlf";
print "#$crlf";
print $crlf;
echo get_table_def($db, $table, $crlf).";$crlf$crlf";
print "#$crlf";
print "# $strDumpingData '$table'$crlf";
print "#$crlf";
print $crlf;
get_table_content($db, $table, "my_handler");
exit ;
}
}
else {
print $crlf;
print "# --------------------------------------------------------$crlf";
print "#$crlf";
print "# $strTableStructure '$table'$crlf";
print "#$crlf";
print $crlf;
echo get_table_def($db, $table, $crlf).";$crlf$crlf";
print "#$crlf";
print "# $strDumpingData '$table'$crlf";
print "#$crlf";
print $crlf;
get_table_content($db, $table, "my_handler");
}
$i++;
}
// enregistrer le save
$sauvegarde = ob_get_clean();
// patch bug CURENT_TIMESTAMP
$sauvegarde = str_replace("DEFAULT 'CURRENT_TIMESTAMP'","DEFAULT CURRENT_TIMESTAMP",$sauvegarde);
$nom_fichier = "$repertoire_sav/$nom_save";
$fd = fopen($nom_fichier,"w+");
fwrite ($fd,$sauvegarde);
fclose($fd);
mysql_close();
/*
* Functions
*/
function get_table_def($db, $table, $crlf)
{
global $drop;
$schema_create = "";
if(!empty($drop))
$schema_create .= "DROP TABLE IF EXISTS $table;$crlf";
$schema_create .= "CREATE TABLE $table ($crlf";
$result = mysql_db_query($db, "SHOW FIELDS FROM $table") or mysql_die();
while($row = mysql_fetch_array($result))
{
$schema_create .= " $row[Field] $row[Type]";
if(isset($row["Default"])
&& (!empty($row["Default"]) || $row["Default"] == "0"))
$schema_create .= " DEFAULT '$row[Default]'";
if($row["Null"] != "YES")
$schema_create .= " NOT NULL";
if($row["Extra"] != "")
$schema_create .= " $row[Extra]";
$schema_create .= ",$crlf";
}
$schema_create = ereg_replace(",".$crlf."$", "", $schema_create);
$result = mysql_db_query($db, "SHOW KEYS FROM $table") or mysql_die();
while($row = mysql_fetch_array($result))
{
$kname=$row['Key_name'];
if(($kname != "PRIMARY") && ($row['Non_unique'] == 0))
$kname="UNIQUE|$kname";
if(!isset($index[$kname]))
$index[$kname] = array();
$index[$kname][] = $row['Column_name'];
}
while(list($x, $columns) = @each($index))
{
$schema_create .= ",$crlf";
if($x == "PRIMARY")
$schema_create .= " PRIMARY KEY (" . implode($columns, ", ") . ")";
elseif (substr($x,0,6) == "UNIQUE")
$schema_create .= " UNIQUE ".substr($x,7)." (".implode($columns,", ").")";
else
$schema_create .= " KEY $x (" . implode($columns, ", ") . ")";
}
$schema_create .= "$crlf)";
return (stripslashes($schema_create));
}
function get_table_content($db, $table, $handler)
{
$result = mysql_db_query($db, "SELECT * FROM $table") or mysql_die();
$i = 0;
while($row = mysql_fetch_row($result))
{
$table_list = "(";
for($j=0; $j<mysql_num_fields($result);$j++)
$table_list .= mysql_field_name($result,$j).", ";
$table_list = substr($table_list,0,-2);
$table_list .= ")";
if(isset($GLOBALS["showcolumns"]))
$schema_insert = "INSERT INTO $table $table_list VALUES (";
else
$schema_insert = "INSERT INTO $table VALUES (";
for($j=0; $j<mysql_num_fields($result);$j++)
{
if(!isset($row[$j]))
$schema_insert .= " NULL,";
elseif($row[$j] != "")
$schema_insert .= " '".addslashes($row[$j])."',";
else
$schema_insert .= " '',";
}
$schema_insert = ereg_replace(",$", "", $schema_insert);
$schema_insert .= ")";
$handler(trim($schema_insert));
$i++;
}
return (true);
}
function my_handler($sql_insert)
{
global $crlf, $asfile;
echo "$sql_insert;$crlf";
}
?>
Aucun commentaire:
Enregistrer un commentaire