让服务器每天备份一次 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";
	?>

