php备份和还原mysql数据库

php实现mysql数据库的备份和还原
基本代码参照自 http://my.oschina.net/netljx/blog/11104

备份的主要php代码:
<?php 

require_once '../modules/all_table.php';

//该文件提供一些必要的配置参数,如$cfg_dbhost,$cfg_dbuser,$cfg_dbpwd,$cfg_dbname等


@header("Expires: -1");
@header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);

@header("Pragma: no-cache");//禁止缓存

header("Content-Type: application/json; charset=utf-8");


$dbhost      = $cfg_dbhost;     //数据库主机名
$dbuser      = $cfg_dbuser;     //数据库用户名
$dbpass     = $cfg_dbpwd;    //数据库密码
$dbname    = $cfg_dbname;    //数据库名


$filename=date("Y-m-d_H-i-s")."-".$dbname.".sql";


$tmpFile = str_replace('\\','/',(dirname(__FILE__)))."/backupdb/".$filename;

//备份文件存放的目录,当前php代码文件下的backupdb文件夹下

$cmd=$mysqldump_dir."mysqldump -h$dbhost -u$dbuser -p$dbpass  $dbname > ".$tmpFile;

//最重要的一点是$mysqldump_dir目录

前面用网上的代码去实现都不能备份,原因就是,没有用$mysqldump_dir,该变量为mysql的bin文件夹位置

例如:我的mysql是安装在D:\myEnv\下,所以$mysqldump_dir=D:\myEnv\mysql\bin 因为程序要调用mysqldump方法是用到D:\myEnv\mysql\bin下的mysqldump.exe。所以要指定位置。下面还原数据库方法也是一样。

exec($cmd); 
 
echo "<tr><td colspan='2' style='font-size:15px;text-align:center;' nowrap>数据库备份信息</td></tr>";
echo "<tr><td nowrap>备份文件名</td><td>".$filename."</td></tr>";
echo "<tr><td nowrap>备份文件目录</td><td>".str_replace('\\','/',$tmpFile)."</td></tr>";
echo "<tr><td nowrap>操作命令</td><td style='color:green;'>".$cmd."</td></tr>";

if (filesize($tmpFile)>0){
//文件大小>0说明已经写入咯内容,到目前位置,我还没找到比较好的方法判断exec( $cmd)命令执行成功,所以采用的这种方法。
echo "<tr><td colspan='2' style='font-size:15px;color:#006600' nowrap>数据库备份成功</td></tr>";
}
else{
echo "<tr><td colspan='2' style='font-size:15px;color:red' nowrap>数据库备份失败</td></tr>";
echo "<tr><td nowrap>提示信息</td><td style='color:red;'>".$cmd."</td></tr>";
}
exit;
?>

数据库还原的主要代码:

<?php
require_once((dirname(__FILE__).'/../modules/all_table.php'));
@header("Expires: -1");
@header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
@header("Pragma: no-cache");
header("Content-Type: application/json; charset=utf-8");

if ( !empty( $_POST['sqlFile'] ) )
{
 
 $file_name = $_POST['sqlFile']; //要导入的SQL文件名
 $file_name=str_replace('\\','/',$file_name);
 if (strstr($file_name,'/')){
  $file_name=substr($file_name,strrpos($file_name,"/")+1);
 }
 
 $back_name=substr($file_name,strrpos($file_name,"."));
 $dbhost      = $cfg_dbhost;     //数据库主机名
 $dbuser      = $cfg_dbuser;     //数据库用户名
 $dbpass     = $cfg_dbpwd;    //数据库密码
 $dbname    = $cfg_dbname;    //数据库名


 if($back_name!='.sql'){
  echo "<br><span style='color:red;'>只能导入sql文件,禁止导入其他文件</span>";
  exit();
 }
 //如果换文件存储目录需要修改
 
$filepath = str_replace('\\','/',(dirname(__FILE__)))."/backupdb/".$file_name;

$fp = @fopen($filepath, "r") or die("不能打开SQL文件 $filepath");//打开文件
mysql_connect($dbhost, $dbuser, $dbpass) or die("不能连接数据库 $dbhost");//连接数据库
mysql_select_db($dbname) or die ("不能打开数据库 $dbname");//打开数据库

echo "<p>正在清空数据库,请稍等....<br>";                     
$result = mysql_query("SHOW tables");                     
while ($currow=mysql_fetch_array($result))
{                     
   mysql_query("drop TABLE IF EXISTS $currow[0]");                     
   echo "清空数据表【".$currow[0]."】成功!<br>";                     
}                     
echo "<br>恭喜你清理MYSQL成功<br>";

echo "正在执行导入数据库操作<br>";
// 导入数据库的MySQL命令

exec($mysqldump_dir."mysql -h$dbhost -u$dbuser -p$dbpass $dbname < ".$filepath);

//$mysqldump_dir同备份代码原理一样,如果是备份和还原本地代码,-h$dbhost参数可以删除。

echo "<br/><span style='color:green;'>数据库还原成功!</span><br/>".$time=date("Y-m-d H:i:s" ,time());
echo "<br/>【数据库命令】".$mysqldump_dir."mysql -h$dbhost -u$dbuser -p$dbpass $dbname < ".$filepath;
mysql_close(); 
exit();
}
else{
echo "<br><span style='color:red;'>请导入备份数据库文件</span>";

?> 

网页:
<form id="restore" name="restore" method="post" action="">
<fieldset  style="PADDING-RIGHT: 15px; PADDING-LEFT: 15px; PADDING-BOTTOM: 8px;  PADDING-TOP: 8px; HEIGHT: 60%">
     <legend style="MARGIN-BOTTOM: 10px;width:auto;" ><b>数据库还原</b></legend>
<table>
<tr><td>&nbsp;&nbsp;</td><td>&nbsp;</td></tr>
<tr>
<th>
【数据库SQL文件】:
</th>
<td>
<input class='file1' type="file" name="sqlFile" id="sqlFile" >
</td>
</tr>
<tr><td colspan='2' align="center">&nbsp;</td></tr>
<tr><td colspan='2' align="center"><input class='b' type="button"  onclick='Restore()' value="还原"></td></tr>
</table>
</fieldset>
</form>
重点是还原和备份代码调用exec()方法时的 $mysqldump_dir.

你可能感兴趣的:(PHP,mysql,备份,还原)