mysql自动备份的实现方法

2010.07.19 请收藏本站地址:flyfei.net

文/蒹葭苍苍整理

    让服务器每天备份一次 mysql 数据库并自动打包,同时删除 30 天前的备份文件。
1. 环境: Windows + Apache + PHP + MySQL
2. 假设 PHP 安装目录为 D:/php,MySQL 安装目录为 D:/mysql
3. 在 D:/php 下建立目录 WinRAR, 把你 winrar 安装目录下的 WinRAR.exe 和 Rarreg.key 复制到 D:/php/WinRAR
4. D:/php 下建立文件 mysql_backup.php
5. D:/php 下建立文件 mysql_backup.bat,内容只有一句

  php.exe mysql_backup.php

6. 双击该 bat 文件运行,如果能备份了,下一步添加任务计划
7. 把 D:/php/mysql_backup.bat 添加到任务计划,时间自己定吧

    mysql_backup.php 文件代码如下:

<?
function copyDir($dirFrom,$dirTo)  {
 //如果遇到同名文件无法复制,则直接退出
 if(is_file($dirTo)){
  echo(“无法建立目录 $dirTo\n”);
 }
 //如果目录不存在,则建立之
 if(!file_exists($dirTo)){
  mkdir($dirTo);
 }
 $handle = opendir($dirFrom);
 //打开当前目录
 readdir($handle); //排除”.”
 readdir($handle); //排除 “..”
 //循环读取文件
 while (false !== ($file = readdir($handle))) {
  //生成源文件名
  $fileFrom = $dirFrom . DIRECTORY_SEPARATOR .$file;
  //生成目标文件名
  $fileTo = $dirTo .DIRECTORY_SEPARATOR .$file;
  if(is_dir($fileFrom)){
   //如果是子目录,则进行递归操作
   copyDir($fileFrom,$fileTo);
  }
  else {
   //如果是文件,则直接用copy函数复制
   @copy($fileFrom,$fileTo);
  }
 }
}
 
//保存目录,路径要用反斜杠.您需要手动建立它.
//$store_folder = dirname(__FILE__).’\autobackup’;
$store_folder = ‘D:\MysqlAutoBakup’;
 
//用户名和密码
//该帐号须有操作[所有]的数据库及FILE的权限
//否则有些数据库不能备份.
$db_username = “root”;
$db_password = “”;
 
$time=time();
 
$nowdir = “$store_folder\\”.date(“Ymd”,$time).””;
if(is_dir($nowdir)) @rmdir($nowdir);//die(“directory  exists.\n”);
if(file_exists(“$nowdir.rar”)) @unlink(“$nowdir.rar”);//die(“file exists.\n”);
@mkdir($nowdir);
 
$result_link=mysql_connect(“localhost”,”$db_username”,”$db_password”);
$query=mysql_list_dbs();
 
while($result=mysql_fetch_array($query)){
 echo “dumping database `$result[Database]`,wait for a minute please…\n”;
 system (dirname(__FILE__).’\..\mysql\bin\mysqldump –opt ‘.”$result[Database] -u{$db_username} “.($db_password?”-p{$db_password}”:””).” > $nowdir\\$result[Database].sql”);
}
echo “\npackage database files right now ,please wait…\n”;
 
system( dirname(__FILE__).”\\WinRAR\\WinRAR.exe a -ep1 -r -o+ -m5 -df \”$nowdir.rar\” \”$nowdir\” ” );
 
//删除 30 天前的文件
@unlink(“$store_folder\\”.date(“Ymd”,$time-86400*30).”.rar”);
 
echo “\nOK!\n”;
?>
阅 3,073

  1. 头像
    2010.07.19 - admin

    我自己已经测试成功了的。

说实话不想碰“钻石公主”号这个题材,毕竟这次疫情起源于中国。拿发生在国外的事儿来议论,会有喷子喷你:怎么不多反思反思自己?