PHP implements mysql database backup class_PHP tutorial

WBOY
Release: 2016-07-21 15:53:31
Original
891 people have browsed it

1. To instantiate DbBak, you need to tell it two things: where the data server is ($connectid) and which directory to back up to ($backupDir):

require_once('DbBak.php');
require_once( 'TableBak.php');
$connectid = mysql_connect('localhost','root','123456');
$backupDir = 'data';
$DbBak = new DbBak($connectid, $backupDir);

2. Then you can start backing up the database. Not only can you specify which database to back up, but you can also set up detailed settings to back up only those tables:
2.1 If you want to back up the mybbs library For all tables, just do this:

$DbBak->backupDb('mybbs');

2.2 If you only want to back up the board, face, and friendlist tables in the mybbs library, you can use Specify a one-dimensional array:

$DbBak->backupDb('mybbs',array('board','face','friendsite'));

2.3 If you only want to backup A table, such as the board table:
$DbBak->backupDb('mybbs','board');
3, data recovery:
For the three cases 2.1, 2.1, and 2.3, as long as the corresponding Modify the statement and replace backupDb with restoreDb to achieve data recovery:

$DbBak->restoreDb('mybbs');
SQL code
$DbBak->restoreDb(' mybbs',array('board','face','friendsite'));
PHP code
$DbBak->restoreDb('mybbs','board');
PHP code
require_once('TableBak.php');
class DbBak {
var $_mysql_link_id;
var $_dataDir;
var $_tableList; 🎜> function DbBak($_mysql_link_id,$dataDir) 
{ 
( (!is_string($dataDir)) || strlen($dataDir)==0) && die('error:$datadir is not a string') ;
!is_dir($dataDir) && mkdir($dataDir);
$this->_dataDir = $dataDir;
$this->_mysql_link_id = $_mysql_link_id; 🎜>
function backupDb($dbName,$tableName=null) 
{ 
( (!is_string($dbName)) || strlen($dbName)==0) && die('$dbName must be a string value');
//step1: Select database:
mysql_select_db($dbName);
//step2: Create database backup directory
$dbDir = $this->_dataDir.DIRECTORY_SEPARATOR. $dbName;
!is_dir($dbDir) && mkdir($dbDir);
//step3: Get all table names in the database and start backing up the table
$this->_TableBak = new TableBak($this ->_mysql_link_id,$dbDir); 
if(is_null($tableName)){//backup all table in the db 
$this->_backupAllTable($dbName); 
return; 

if(is_string($tableName)){ 
(strlen($tableName)==0) && die('....'); 
$this->_backupOneTable($dbName ,$tableName);
return;
}
if (is_array($tableName)){ || strlen($table)==0 ) && die('....');
}
$this->_backupSomeTalbe($dbName,$tableName); >} 
}    

function restoreDb($dbName,$tableName=null){    
( (!is_string($dbName)) || strlen($dbName)==0 ) && die('$dbName must be a string value');    
//step1:检查是否存在数据库 并连接:    
@mysql_select_db($dbName) || die("the database $dbName dose not exists");    
//step2:检查是否存在数据库备份目录    
$dbDir = $this->_dataDir.DIRECTORY_SEPARATOR.$dbName;    
!is_dir($dbDir) && die("$dbDir not exists");    
//step3:start restore    
$this->_TableBak = new TableBak($this->_mysql_link_id,$dbDir);    
if(is_null($tableName)){//backup all table in the db    
$this->_restoreAllTable($dbName);    
return;    
}    
if(is_string($tableName)){    
(strlen($tableName)==0) && die('....');    
$this->_restoreOneTable($dbName,$tableName);    
return;    
}    
if (is_array($tableName)){    
foreach ($tableName as $table){    
( (!is_string($table)) || strlen($table)==0 ) && die('....');    
}    
$this->_restoreSomeTalbe($dbName,$tableName);    
return;    
}    
}    

function _getTableList($dbName)    
{    
$tableList = array();    
$result=mysql_list_tables($dbName,$this->_mysql_link_id);    
for ($i = 0; $i < mysql_num_rows($result); $i++){    
        array_push($tableList,mysql_tablename($result, $i));    
}    
mysql_free_result($result);    
return $tableList;    
}    

function _backupAllTable($dbName)    
{    
foreach ($this->_getTableList($dbName) as $tableName){    
$this->_TableBak->backupTable($tableName);    
}    
}    

function _backupOneTable($dbName,$tableName)    
{    
!in_array($tableName,$this->_getTableList($dbName)) && die("指定的表名$tableName在数据库中不存在");    
$this->_TableBak->backupTable($tableName);    
}    

function _backupSomeTalbe($dbName,$TableNameList)    
{    
foreach ($TableNameList as $tableName){    
!in_array($tableName,$this->_getTableList($dbName)) && die("指定的表名$tableName在数据库中不存在");    
}    
foreach ($TableNameList as $tableName){    
$this->_TableBak->backupTable($tableName);    
}    
}

function _restoreAllTable($dbName)
{
//step1: Check whether the backup files of all data tables exist and whether they are writable:
foreach ($this->_getTableList($ dbName) as $tableName){
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR
. $dbName.DIRECTORY_SEPARATOR
. $tableName.DI RECTORY_SEPARATOR                                                               🎜>!is_writeable ($tableBakFile) && die("$tableBakFile not exists or unwirteable");
}
//step2:start restore
foreach ($this->_getTableList($dbName) as $tableName){
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR
$dbName.DIRECTORY_SEPARATOR
. $tableName.DIRECTORY_SE PARATOR                                                                                       this->_TableBak->restoreTable($tableName,$tableBakFile); 
} 
} 

function _restoreOneTable($dbName,$tableName) 
{ 
//step1 :Check whether the data table exists:
!in_array($tableName,$this->_getTableList($dbName)) && die("The specified table name$tableName does not exist in the database ");
//step2: Check whether the data table backup file exists and whether it is writable:
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR
. $dbName.DIRECTORY_SEPARATOR
. $tableName .DIRECTORY_SEPARATOR                                                         . 🎜>$this ->_TableBak->restoreTable($tableName,$tableBakFile);
}
function _restoreSomeTalbe($dbName,$TableNameList)
{
//step1: Check whether the data table exists:
foreach ($TableNameList as $tableName){
!in_array($tableName,$this->_getTableList($dbName)) && die("The specified table name$tableNamein Does not exist in the database");
}
//step2: Check whether the data table backup file exists and whether it is writable:
foreach ($TableNameList as $tableName){
$tableBakFile = $this ->_dataDir.DIRECTORY_SEPARATOR                                                                              . $tableName.'.sql';
!is_writeable ($tableBakFile) && die("$tableBakFile not exists or unwirteable");
}    
//step3:start restore:    
foreach ($TableNameList as $tableName){    
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR    
               . $dbName.DIRECTORY_SEPARATOR    
               . $tableName.DIRECTORY_SEPARATOR    
               . $tableName.'.sql';    
$this->_TableBak->restoreTable($tableName,$tableBakFile);    
}    
}    
}    
?>     

复制代码 代码如下:
& lt;? PHP
// Only DBBAK can call this class.
function TableBak($mysql_link_id,$dbDir)
{
$this->_mysql_link_id = $mysql_link_id;
$this->_dbDir = $dbDir;
}   

function backupTable($tableName)
{
//step1: Create the backup directory name of the table:
$tableDir = $this->_dbDir.DIRECTORY_SEPARATOR.$tableName;
!is_dir( $tableDir) && mkdir($tableDir);
//step2: Start backup:
$this->_backupTable($tableName,$tableDir);
}

function restoreTable( $tableName,$tableBakFile) 
{ 
set_time_limit(0); 
$fileArray = @file($tableBakFile) or die("can open file $tableBakFile"); 
$num = count( $fileArray);
mysql_unbuffered_query("DELETE FROM $tableName");
$sql = $fileArray[0];
for ($i=1;$i<$num-1;$i++) {  
mysql_unbuffered_query($sql.$fileArray[$i]) or (die (mysql_error()));  
}   
return true;   
}  ($ tableName){
$fieldInfo = array();
$sql="SELECT * FROM $tableName LIMIT 1"; >$num_field=mysql_num_fields($result);                                                              =mysql_field_type($result,$i); 
$fieldInfo[$field_name] = $field_type; 
} 
mysql_free_result($result); 
return $fieldInfo; 
}     
function _quoteRow($fieldInfo,$row){                                                              ; ".mysql_escape_string($field_value)."'";break;  
case "date":   $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;    
case " datetime": $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;
case "time": $row[$field_name] = "'".mysql_escape_string($field_value) ."'";break;
case "unknown": $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;
case "int": $row[$ field_name] = intval($field_value); break;
case "real": $row[$field_name] = intval($field_value); break;
case "timestamp":$row[$field_name] = intval ($field_value); break;
default: $row[$field_name] = intval($field_value); break;
}
}
return $row;
}
function _backupTable($tableName,$tableDir)
{
//Get the field type of the table:
$fieldInfo = $this->_getFieldInfo ($tableName);

//step1: Construct the first half of the INSERT statement and write it to the file:
$fields = array_keys($fieldInfo);
$fields = implode(',',$ fields);
$sqltext="INSERT INTO $tableName($fields)VALUES rn";
$datafile = $tableDir.DIRECTORY_SEPARATOR.$tableName.'.sql';
(!$handle = fopen ($datafile,'w')) && die("can not open file $datafile"); write data to file $datafile");
fclose($handle);

///step2: Get the data and write it to the file: Resources:
set_time_limit(0);
$sql = "select * from $tableName";
$result = mysql_query($sql,$this->_mysql_link_id);
//Open data Backup file: $tableName.xml
$datafile = $tableDir.DIRECTORY_SEPARATOR.$tableName.'.sql';
(!$handle = fopen($datafile,'a')) && die("can not open file $datafile");
//Get table records one by one and write them into the file: $this->_quoteRow($fieldInfo,$row);                                                                                                                    $record)) && die("can not write data to file $datafile");
}
mysql_free_result($result);
//Close the file: >fclose($handle);                                                              🎜>
SQL code
//example 1 backup:
require_once('DbBak.php');
require_once('TableBak.php');
$connectid = mysql_connect('localhost ','root','123456');
$backupDir = 'data';
$DbBak = new DbBak($connectid,$backupDir);
$DbBak->backupDb('mybbs' ; DbBak.php');
require_once('TableBak.php');
$connectid = mysql_connect('localhost','root','123456'); 🎜>$DbBak = new DbBak($connectid,$backupDir);
$DbBak->restoreDb('mybbs');




http://www.bkjia.com/PHPjc/318669.html

www.bkjia.com

true

http: //www.bkjia.com/PHPjc/318669.html

TechArticle

1. To instantiate DbBak, you need to tell it two things: where the data server is ($connectid) and where to backup it Directory ($backupDir): require_once('DbBak.php'); require_once('TableBak.php'); $co...


source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template