天天看點

mysql資料庫備份類檔案

<?php

class backUp{

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){          //開始備份

global $pdo;

global $database;

$this->dbName  = $dbName;

$this->dataDir  = $dataDir;

$this->tableNames = $tableNames;

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

$sqls='';

foreach($tables as $tablename){

$tablename =$tablename['Tables_in_'.$database];

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

continue;

}

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

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

$sqls .= "\nDROP TABLE IF EXISTS $tablename;\n\n";

//讀取表結構

try{

$rs = $pdo->query('SHOW CREATE TABLE'.$tablename); //創表語句

}catch(PDOException $e){

var_dump($e);

}

$row=$rs->fetch();

//獲得表結構組成SQL

$sqls.=$row['Create Table'].";\n\n";

unset($rs);

unset($row);

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

//查尋出表中的所有資料

$rs=$pdo->query("select * from ".$tablename);

$result=$rs->setFetchMode (PDO::FETCH_ASSOC);

$rows=$rs->fetchAll();

$count = $rs->rowCount();

echo '<br>'.$count.'<br>';

$i = 0;

//$sqls.="INSERT INTO $tablename VALUES ";

foreach ($rows as $row) {

//var_dump($row);

$douhao="";

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

foreach ($row as $ro) {

$ro=addslashes($ro);

$sqls.=$douhao.'('.'\''.$ro.'\''.")";

$douhao=",";

}

$sqls.=");\n";

}

//$sqls.=";\n";

}

$backfilepath=$this->dataDir.$database.date("Y-m-d",time()).'.sql';

//寫入檔案

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

fwrite($filehandle, $sqls);

fclose($filehandle);

return true;

}

public function delarray($array){   //處理傳入進來的數組

global $pdo;

global $database;

$array_del = array('first'=>$array);         //echo '傳進函數的'.$array_del['first'];

foreach($array_del as $tables){

if($tables == '*'){    //所有的表(獲得表名時不能按正常方式來組成一個數組)

$newtables =$pdo->query('show tables from '.$database);

$tableList = array();

$tableList =$newtables->fetchAll();

}else{

$tableList=$array_del;

break;

}

}

return $tableList;

}

//end

}

global $pdo ;

global $database;

$database = 'test';

$dir='./';

$pdo = newPDO('mysql:host=localhost;dbname='.$database,'root','',

array(PDO::ATTR_PERSISTENT=> true,PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

if (!$pdo) {

echo'connect_wrong';

}

$data = new backUp($pdo);

$success =$data->backupTables($database,$dir,'*');

if ($success) {

echo'backup_okay';

}

?>

繼續閱讀