天天看点

php 备份mysql数据库

<?php

require_once("backdata.class.php");

$link = @mysql_connect("localhost","root","123456") or die ('Could not connect to server.');

mysql_query("use student",$link);

mysql_query("set names utf8",$link);

$dbbck=new backupData($link);//实例化它,只要一个链接标识就行了

     $teblename = $_REQUEST['beifen'];

    // echo 'sdfas'.$teblename;

//备份数据时,如想备份一个数据库中的所有表,你可这样写:

//$dbbck->backupTables("student","./",array('*'));

//备份数据时,如想备份一个数据库中的仅一个表时,你可这样写:

if($teblename=='totao'){

$dbbck->backupTables("student","data/",array('totaopingfen','secondpingfen'));

}else{

$dbbck->backupTables("student","data/",array($teblename));

}

//备份数据时,如想备份一个数据库中的多个表时,你可这样写:

//$dbbck->backupTables("student","./",array('class','kq_xsjbxxb','kq_xsjbxxb'));

?> 

/*

*

*简单的一个Mysql备份数据类

*/

class backupData{

    private    $mysql_link;//链接标识

    private    $dbName;    //数据库名

    private    $dataDir;     //数据所要存放的目录

    private    $tableNames;//表名

    public function __construct($mysql_link){

         $this->mysql_link = $mysql_link;

    }

    public function backupTables($dbName,$dataDir,$tableNames){//开始备份

        $this->dbName  = $dbName;

        $this->dataDir  = $dataDir;

        $this->tableNames = $tableNames;

        $tables=$this->delarray($this->tableNames);

        $sqls='';

        foreach($tables as $tablename){

            if($tablename==''){//表不存在时

                continue;

            }

         //echo  $dbName;  

            //************************以下是形成SQL的前半部分**************

            //如果存在表,就先删除

            $sqls .= "DROP TABLE IF EXISTS $tablename;n";

            //读取表结构

            $rs = mysql_query("SHOW CREATE TABLE $tablename",$this->mysql_link); 

            $row=mysql_fetch_row($rs);

            //获得表结构组成SQL

            $sqls.=$row['1'].";nn";

            unset($rs);

            unset($row);

            //************************以下是形成SQL的后半部分**************

            //查寻出表中的所有数据

            $rs=mysql_query("select * from $tablename",$this->mysql_link);

            //表的字段个数

            $field=mysql_num_fields($rs);

            //形成此种SQL语句:"INSERT INTO `groups` VALUES('1499e0ca25988d','主任','','0');"

            while($rows=mysql_fetch_row($rs)){

                $comma='';//逗号

                $sqls.="INSERT INTO `$tablename` VALUES(";

                for($i=0;$i<$field;$i++){

                    $sqls.=$comma."'".$rows[$i]."'";

                    $comma=',';

                }

                $sqls.=");nnn";

        }

        $backfilepath=$this->dataDir.date("Ymdhis",time()).'.sql';

       //echo    $backfilepath;

        //写入文件

        $filehandle = fopen($backfilepath, "w");

        fwrite($filehandle, $sqls);

        fclose($filehandle);

          echo   '数据备份成功';

    private function delarray($array){   

    //echo 'BBBBBBBBBBb'; //处理传入进来的数组

        foreach($array as $tables){

            if($tables=='*'){    //所有的表(获得表名时不能按常规方式来组成一个数组)

                $newtables=mysql_list_tables($this->dbName,$this->mysql_link);

                $tableList = array();

                for ($i = 0; $i < mysql_numrows($newtables); $i++){

                    array_push($tableList,mysql_tablename($newtables, $i));

                $tableList=$tableList;

            }else{

                $tableList=$array;

                break;

        return $tableList;

?>

本文转自yunlielai51CTO博客,原文链接:http://blog.51cto.com/4925054/1109538,如需转载请自行联系原作者