2019独角兽企业重金招聘Python工程师标准>>>
基本代码参照自 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 "
echo "
echo "
if (filesize($tmpFile)>0){
//文件大小>0说明已经写入咯内容,到目前位置,我还没找到比较好的方法判断exec( $cmd)命令执行成功,所以采用的这种方法。
echo "
}
else{
echo "
echo "
}
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同备份代码原理一样&#xff0c;如果是备份和还原本地代码&#xff0c;-h$dbhost参数可以删除。
echo "数据库还原成功&#xff01;
".$time&#61;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 "
请导入备份数据库文件";
}
?>
网页&#xff1a;
重点是还原和备份代码调用exec()方法时的 $mysqldump_dir.。