PHP数据库备份还原

时间:2022-06-12 03:18:09

 //数据库备份
    public function exportDatabase(){
        //备份数据库
        $host="localhost";
        $user="root";//数据库账号
        $password="root";//数据库密码
        $dbname="article";//数据库名称
//这里的账号、密码、名称都是从页面传过来的
        if(!mysql_connect($host,$user,$password)) //连接mysql数据库
        {
            echo '数据库连接失败,请核对后再试';
            exit;
        }
        if(!mysql_select_db($dbname)) //是否存在该数据库
        {
            echo '不存在数据库:'.$dbname.',请核对后再试';
            exit;
        }
        mysql_query("set names 'utf8'");
        $mysql= "set charset utf8;\r\n";
        $q1=mysql_query("show tables");
        while($t=mysql_fetch_array($q1)){
            $table=$t[0];
//            DROP TABLE IF EXISTS `article`;
            $q2=mysql_query("show create table `$table`");
            $sql=mysql_fetch_array($q2);
            $mysql.="DROP TABLE IF EXISTS `".$sql['Table']."`;\r\n".$sql['Create Table'].";\r\n";
            $q3=mysql_query("select * from `$table`");
            while($data=mysql_fetch_assoc($q3)){
                $keys=array_keys($data);
                $keys=array_map('addslashes',$keys);
                $keys=join('`,`',$keys);
                $keys="`".$keys."`";
                $vals=array_values($data);
                $vals=array_map('addslashes',$vals);
                $vals=join("','",$vals);
                $vals="'".$vals."'";
                $mysql.="insert into `$table`($keys) values($vals);\r\n";
            }
        }
        $filename="data/".$dbname.date('YmdHis').".sql"; //存放路径,默认存放到项目最外层
        $fp = fopen($filename,'w');
        fputs($fp,$mysql);
        fclose($fp);
        echo "数据备份成功";

        }

//删除文件名
//    function delFile($dirName){
//        if(file_exists($dirName) && $handle=opendir($dirName)){
//            while(false!==($item = readdir($handle))){
//                if($item!= "." && $item != ".."){
//                    if(file_exists($dirName.'/'.$item) && is_dir($dirName.'/'.$item)){
//                        delFile($dirName.'/'.$item);
//                    }else{
//                        if(unlink($dirName.'/'.$item)){
//                            return true;
//                        }
//                    }
//                }
//            }
//            closedir( $handle);
//        }
//    }

//数据还原
    public function inputDatabase($name){

        $filename = $name;
        $host="localhost"; //主机名
        $user="root"; //MYSQL用户名
        $password="root"; //密码
        $dbname="article"; //在此指定您要恢复的数据库名,不存在则必须先创建,请自已修改数据库名
        mysql_connect($host,$user,$password);
        mysql_select_db($dbname);
        $mysql_file="data/".$filename; //指定要恢复的MySQL备份文件路径,请自已修改此路径
        $this->restore($mysql_file); //执行MySQL恢复命令

    }
    function restore($fname)
    {
        if (file_exists($fname)) {
            $sql_value="";
            $cg=0;
            $sb=0;
            $sqls=file($fname);
            foreach($sqls as $sql)
            {
                $sql_value.=$sql;
            }
            $a=explode(";\r\n", $sql_value); //根据";\r\n"条件对数据库中分条执行
            $total=count($a)-1;
            mysql_query("set names 'utf8'");
            for ($i=0;$i<$total;$i++)
            {
                mysql_query("set names 'utf8'");
                //执行命令
                if(mysql_query($a[$i]))
                {
                    $cg+=1;
                }
                else
                {
                    $sb+=1;
                    $sb_command[$sb]=$a[$i];
                }
            }
            echo "操作完毕,共处理 $total 条命令,成功 $cg 条,失败 $sb 条";
            //显示错误信息
            if ($sb>0)
            {
                echo "<hr><br><br>失败命令如下:<br>";
                for ($ii=1;$ii<=$sb;$ii++)
                {
                    echo "<p><b>第 ".$ii." 条命令(内容如下):</b><br>".$sb_command[$ii]."</p><br>";
                }
            }  //-----------------------------------------------------------
        }else{
            echo "MySQL备份文件不存在,请检查文件路径是否正确!";
        }
    }