阅读:2127回复:0
windows下mysql的自动备份实现
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: 代码如下:
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 添加到任务计划,时间选每天. |
|