让服务器每天备份一次 MySQL 数据库并自动打包,同时删除 30 天前的备份文件。
1. 环境: windows server 2003 + Apache 2.0 + PHP5 + MySQL 4.0.26 .
2. 假设 PHP 安装目录为 D:/php ,MySQL 安装目录为 D:/mysql.
3. D:/php 下建立文件 mysql_backup.php
<?php
set_time_limit(0);
$days= 90;
//保存目录,路径要用反斜杠.您需要手动建立它.
$store_folder='K:\bak';
//用户名和密码,该帐号须有操作[所有]的数据库及FILE的权限,否则有些数据库不能备份.
$db_username="root";
$db_password="*****";
/**
* @desc 生成zip压缩文件的函数
*
* @param $dir string 需要压缩的文件夹名
* @param $filename string 压缩后的zip文件名 包括zip后缀
* @param $outDir string 输出目录
*/
functionzip($dir,$filename,$outDir) {
if(!file_exists($dir) || !is_dir($dir)) {
die(' can not exists dir '.$dir);
}
if(strtolower(end(explode('.',$filename))) !='zip') {
die('only Support zip files');
}
$dir=str_replace('\\','/',$dir);
$filename=str_replace('\\','/',$filename);
if(file_exists($filename)) {
die('the zip file '.$filename.' has exists !');
}
$files=array();
getfiles($dir,$files);
if(empty($files)) {
die(' the dir is empty');
}
$zip=newZipArchive;
$res=$zip->open($outDir."\\".$filename, ZipArchive::CREATE);
if($res=== TRUE) {
foreach($filesas$v) {
$zip->addFile($v,str_replace($dir.'/','',$v));
}
$zip->close();
echo'ok';
}else{
echo'failed';
}
}
functiongetfiles($dir, &$files=array()) {
if(!file_exists($dir) || !is_dir($dir)) {
return;
}
if(substr($dir, -1) =='/') {
$dir=substr($dir, 0,strlen($dir) - 1);
}
$_files= scandir($dir);
foreach($_filesas$v) {
if($v!='.'&&$v!='..') {
if(is_dir($dir.'/'.$v)) {
getfiles($dir.'/'.$v,$files);
}else{
$files[] =$dir.'/'.$v;
}
}
}
return$files;
}
/*
* 删除目录
*/
functiondelDirAndFile($dirName) {
if($handle= opendir("$dirName")) {
while(false !== ($item= readdir($handle) )) {
if($item!="."&&$item!="..") {
if(is_dir("$dirName/$item")) {
delDirAndFile("$dirName/$item");
}else{
if(unlink("$dirName/$item"))
echo"成功删除文件: $dirName/$item<br />\n";
}
}
}
closedir($handle);
if(rmdir($dirName))
echo"成功删除目录: $dirName<br />\n";
}
}
$time= time();
$date=date("Y-m-d",$time);
$nowdir="$store_folder\\".$date."";
if(file_exists("$nowdir.rar"))
die("File exists.\n");
@mkdir($nowdir);
mysql_connect("localhost","$db_username","$db_password");
$query= mysql_list_dbs();
while($result= mysql_fetch_array($query)) {
system(dirname(__FILE__) .'\..\Mysql\bin\mysqldump --opt '."$result[Database] -u{$db_username} ". ($db_password?"-p{$db_password}":"") ." > $nowdir\\$result[Database].sql");
echo"database:`$result[Database]`...\n";
}
echo"\nWinrar loading...\n";
zip($nowdir,"\\".$date.".zip",$store_folder);
delDirAndFile($nowdir);
//删除 90 天前的文件
@unlink("$store_folder\\".date("Ymd",$time- 86400 *$days) .".zip");
echo"\nOK!\n";
?>