当前位置:优站分类目录 » 站长资讯 » 网站运营 » 文章详细

window server下mysql数据库每天自动备份

来源:网站目录 时间:2014-08-19目录:网站运营浏览:1938次 

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