php 还原mysql,php备份和还原mysql数据库

http://my.oschina.net/netljx/blog/11104

备份的主要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 "

数据库备份信息";

echo "

备份文件名".$filename."";

echo "

备份文件目录".str_replace('\\','/',$tmpFile)."";

echo "

操作命令".$cmd."";

if (filesize($tmpFile)>0){

//文件大小>0说明已经写入咯内容,到目前位置,我还没找到比较好的方法判断exec(

$cmd)命令执行成功,所以采用的这种方法。

echo "

数据库备份成功";

}

else{

echo "

数据库备份失败";

echo "

提示信息".$cmd."";

}

exit;

?>

数据库还原的主要代码:

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 "只能导入sql文件,禁止导入其他文件";

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 "

正在清空数据库,请稍等....
";

$result = mysql_query("SHOW tables");

while ($currow=mysql_fetch_array($result))

{

mysql_query("drop TABLE IF EXISTS $currow[0]");

echo "清空数据表【".$currow[0]."】成功!
";

}

echo "
恭喜你清理MYSQL成功
";

echo "正在执行导入数据库操作
";

// 导入数据库的MySQL命令

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

//$mysqldump_dir同备份代码原理一样,如果是备份和还原本地代码,-h$dbhost参数可以删除。 echo "数据库还原成功!
".$time=date("Y-m-d H:i:s" ,time());

echo "
【数据库命令】".$mysqldump_dir."mysql -h$dbhost -u$dbuser -p$dbpass $dbname < ".$filepath;

mysql_close();

exit();

}

else{

echo "请导入备份数据库文件";

}

?>

网页:

数据库还原

   

【数据库SQL文件】:

 

重点是还原和备份代码调用exec()方法时的

$mysqldump_dir.。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值