admin
管理员
管理员
  • UID1
  • 粉丝2
  • 关注2
  • 发帖数339
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:4120回复:0

windows下mysql的自动备份实现

楼主#
更多 发布于:2013-07-19 13:44
分享到:
1. 环境: windows server 2003 + Apache  + PHP5 + MySQL 5 .
2. 假设 PHP 安装目录为 D:/php5 ,MySQL 安装目录为 D:/mysql.
3. 在 D:/php5 下建立目录 WinRAR, 把你 winrar 安装目录下的 WinRAR.exe 和 RARReg.KEY 复制到 D:/php5/WinRAR .

4. D:/php5 下建立文件 mysql_backup.php: 代码如下:

  1. <?php
    date_default_timezone_set('PRC');
    //保存目录,路径要用反斜杠.您需要手动建立它.
    $store_folder = 'D:\data_backup';
    //用户名和密码,该帐号须有操作[所有]的数据库及FILE的权限,否则有些数据库不能备份.
    $db_host = "localhost";
    $db_username = "root";
    $db_password = "root";
    $time = time();
    $nowdir = "$store_folder\\" . date("Ymd", $time) . "";
    if(file_exists("$nowdir.rar")) die("File exists.\n");
    @mkdir($nowdir);
    mysql_connect("$db_host", "$db_username", "$db_password");
    //列出 MySQL 服务器中所有的数据库
    $query = mysql_list_dbs();
    while($result = mysql_fetch_array($query)){
     
       system(dirname(__FILE__) . '\..\mysql\bin\mysqldump --opt ' .
    "-u{$db_username} " . ($db_password ? "-p{$db_password}" : "") . "
    $result[Database] > $nowdir\\$result[Database].sql");
        echo "dumping database `$result[Database]`...\n";
    }
    echo "\nWinrar loading...\n";
    system( dirname(__FILE__)."\\WinRAR\\HaoZip.exe a -ep1 -r -o+ -m5 -df \"$nowdir.rar\" \"$nowdir\" " );
    //删除 7 天前的文件
    @unlink("$store_folder\\" . date("Ymd", $time - 86400*7) . ".rar");
    echo "\nOK!\n";
    ?>
5. D:/php5 下建立文件 mysql_backup.bat, 内容如下只有一句:
php.exe mysql_backup.php
6. 双击该 bat 文件运行,如果能备份了,OK,下一步添加任务计划.

7. 把 D:/php5/mysql_backup 添加到任务计划,时间选每天
注:一、在执行 mysql_backup.bat若出现php_exif.dll找不到指定模块错误提示,解决方法如下:
Apache或IIS中,如果按照默认php.ini,会无法加载php_exif.dll模块
要想php_exif能够被成功加载,必须满足下面条件:
1. php_mbstring被启用;
2. php.ini中,php_mbstring必须在php_exif前被加载。因此,你需要修改默认的php.ini中的这两个模块顺序(默认是字典序)

1. extension=php_mbstring.dll2. extension=php_exif.dll
二、在添加计划任务时,无法成功的解决方法如下:

    当创建计划任务完成时提示:“已创建新任务,但可能不能运行,因为无法设置账户信息,指定的错误是:0X80041315,任务计划程序服务没有运行。”
 
   指定错误:0X80041315:任务计划程序服务没有运行。主要原因是你的任务计划服务被禁用,计算机管理里面找到服务,服务里面找到Task
Scheduler,看是否已被禁用,开启就行了。具体操作是打开控制面板->管理工具->服务->找到Task
Scheduler选项,启动类型选:自动、服务状态选:启动。
    “已经创建新任务,但可能不能运行,因为无法设置帐户信息。指定的错误是:0x80070005:拒绝访问。请试着使用"任务"的浏览按钮来定位应用程序。”
    指定错误:0x80070005:拒绝访问,主要原因有如下几种。
1、
登入Windows时使用空白密码的,应将组策略:“帐
户:使用空白密码的本地帐户只允许进行控制台登录”改为“停用”就可以了。具体操作是打开开始运行->输入gpedit.msc打开组策略
->计算机配置->windows设置->安全设置->本地策略->安全选项看右边框内:“帐户:使用空白密码的本地帐户
 只允许进行控制台登录”改为“停用”,就可以了。
2、可能权限不够或被禁止,具体操作是打开开始运行->输入gpedit.msc打开组策略。
*看看组策略的用户权利指派里,禁止用户访问的几个项目有没有对应的名字!
*选择计算机配置->windows设置->安全设置->本地策略->用户权利指派 双击右边的 从网络访问此计算机 把需要的用户名添加到列表。
*选择计算机配置->Windows设置->安全设定->本地策略->安全选项 双击右边的 域控制器:允许服务器操作员计划任务,打开启用。
为了安全,往往php.ini会关闭shell_exec,system,exec等函数,思路一:
先看看PHP的命令参数
Usage: php [options] [-f] <file> [--] [args...]
       php [options] -r <code> [--] [args...]
       php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args..
       php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args..
       php [options] -- [args...]
       php [options] -a
  -a               Run interactively
  -c <path>|<file> Look for php.ini file in this directory
  -n               No php.ini file will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -f <file>        Parse <file>.
  -h               This help
  -i               PHP information
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -r <code>        Run PHP <code> without using script tags <?..?>
  -B <begin_code>  Run PHP <begin_code> before processing input lines
  -R <code>        Run PHP <code> for every input line
  -F <file>        Parse and execute <file> for every input line
  -E <end_code>    Run PHP <end_code> after processing all input lines
  -H               Hide any passed arguments from external tools.
  -s               Display colour syntax highlighted source.
  -v               Version number
  -w               Display source with stripped comments and whitespace.
  -z <file>        Load Zend extension <file>.
  args...          Arguments passed to script. Use -- args when first argumen
                   starts with - or script is read from stdin
  --rf <name>      Show information about function <name>.
  --rc <name>      Show information about class <name>.
  --re <name>      Show information about extension <name>.


所以,可以是存一份 php.ini 文件在另一个目录中,这份 php.ini 的设置是允许 system() 函数的,
再用参数 -c <path>|<file> Look for php.ini file in this directory 指定读取这份 php.ini ,就可以虽WEB方式禁用了 system(),但命令行方式仍然允许了。
思路二:
1. 环境: windows server 2003 + Apache 2 + PHP5 + MySQL 54.0.26 .
2. 假设 PHP 安装目录为 D:/php5 ,MySQL 安装目录为 D:/mysql.
3. 在 D:/php5 下建立目录 WinRAR, 把你 winrar 安装目录下的 WinRAR.exe 和 RARReg.KEY 复制到 D:/php5/WinRAR .
4. D:/php5 下建立文件 mysql_backup.php:
<?php
date_default_timezone_set('PRC');
//保存目录,路径要用反斜杠.您需要手动建立它.
$store_folder = 'D:\data_backup';
//用户名和密码,该帐号须有操作[所有]的数据库及FILE的权限,否则有些数据库不能备份.
$db_host = "localhost";
$db_username = "root";
$db_password = "root";
$time = time();
$nowdir = "$store_folder\\" . date("Ymd", $time) . "";
if(file_exists("$nowdir.rar")) die("File exists.\n");
@mkdir($nowdir);
mysql_connect("$db_host", "$db_username", "$db_password");
//列出 MySQL 服务器中所有的数据库
$query = mysql_list_dbs();
$command = '';
while($result = mysql_fetch_array($query)){
 
   $command .= dirname(__FILE__) . '\..\mysql\bin\mysqldump --opt ' .
"-u{$db_username} " . ($db_password ? "-p{$db_password}" : "") . "
$result[Database] > $nowdir\\$result[Database].sql \r\n";
    $command .= "echo dumping database `$result[Database]`... \r\n";
}
$command .= "echo Winrar loading...\r\n";
$command .= dirname(__FILE__)."\\WinRAR\\WinRAR.exe a -ep1 -r -o+ -m5 -df \"$nowdir.rar\" \"$nowdir\" \r\n";
$command .= "echo OK!\r\n";
$command .= "del mysqldumping_temp.bat\r\n";
$fp = fopen('mysqldumping_temp.bat','w');
fwrite($fp,$command);
fclose($fp);  
//删除 7 天前的文件
@unlink("$store_folder\\" . date("Ymd", $time - 86400*7) . ".rar");
?>5. D:/php5 下建立文件 mysql_backup.bat,内容为:

@echo off
php.exe mysql_backup1.php
if exist mysqldumping_temp.bat call mysqldumping_temp.bat6. 双击该 bat 文件运行,如果能备份了,OK,下一步添加任务计划.
7. 把 D:/php/mysql_backup 添加到任务计划,时间选每天.
思路三:采取直接复制data文件夹的形式
1. 环境: windows server 2003 + Apache 2 + PHP5 + MySQL 54.0.26 .
2. 假设 PHP 安装目录为 D:/php5 ,MySQL 安装目录为 D:/mysql.
3. 在 D:/php5 下建立目录 WinRAR, 把你 winrar 安装目录下的 WinRAR.exe 和 RARReg.KEY 复制到 D:/php5/WinRAR .
4. D:/php5 下建立文件 mysql_backup.php:
<?php
date_default_timezone_set('PRC');
//保存目录,路径要用反斜杠.您需要手动建立它.
$store_folder = 'D:\data_backup';
$time = time();
$nowdir = "$store_folder\\" . date("Ymd", $time) . "";
if(file_exists("$nowdir.rar")) die("File exists.\n");
@mkdir($nowdir);
$command = "net stop mysql \r\n";
$command .= "xcopy" . dirname(__FILE__) . "\..\mysql\data $nowdir\\ /S \r\n";
$command .= "net start mysql \r\n";
$command .= "echo Winrar loading...\r\n";
$command .= dirname(__FILE__)."\\WinRAR\\WinRAR.exe a -ep1 -r -o+ -m5 -df \"$nowdir.rar\" \"$nowdir\" \r\n";
$command .= "echo OK!\r\n";
$command .= "del mysqldumping_temp.bat\r\n";
$fp = fopen('mysqldumping_temp.bat','w');
fwrite($fp, $command);
fclose($fp);  
//删除 7 天前的文件
@unlink("$store_folder\\".date("Ymd",$time-86400*7).".rar");
?>5. D:/php5 下建立文件 mysql_backup.bat,内容为:

@echo off
php.exe mysql_backup1.php
if exist mysqldumping_temp.bat call mysqldumping_temp.bat6. 双击该 bat 文件运行,如果能备份了,OK,下一步添加任务计划.
7. 把 D:/php/mysql_backup 添加到任务计划,时间选每天.
游客

返回顶部