> 백엔드 개발 > PHP 튜토리얼 > postgresql 데이터베이스 PHP는 mysql 데이터베이스 백업 클래스를 구현합니다.

postgresql 데이터베이스 PHP는 mysql 데이터베이스 백업 클래스를 구현합니다.

WBOY
풀어 주다: 2016-07-29 08:37:27
원래의
1018명이 탐색했습니다.

1. DbBak을 인스턴스화하려면 데이터 서버의 위치($connectid)와 백업할 디렉터리($backupDir)라는 두 가지 사항을 알려주어야 합니다.
require_once('DbBak.php')
require_once('TableBak.php');
$connectid = mysql_connect('localhost','root','123456')
$backupDir = 'data'
$DbBak($ connectid,$backupDir) ;  
2. 그런 다음 백업할 데이터베이스를 지정할 수 있을 뿐만 아니라 백업할 테이블만 세부적으로 설정할 수도 있습니다.
2.1 mybbs 라이브러리의 모든 테이블을 백업하려면 다음을 수행하세요.
$DbBak->backupDb('mybbs')
2.2 보드, 페이스, 테이블만 백업하려는 경우 mybbs 라이브러리의 friendlist 테이블을 1차원 배열로 지정할 수 있습니다:
$DbBak- >backupDb('mybbs',array('board','face','friendsite')); >2.3 보드 테이블 등 하나의 테이블만 백업하려는 경우:
$DbBak->backupDb(' mybbs','board')
3. 세 가지 경우 2.1, 2.1 및 2.3의 경우 명령문을 적절히 수정하고 backupDb를 RestoreDb로 대체하여 데이터 복구를 수행할 수 있습니다.
$DbBak->restoreDb('mybbs')
SQL 코드
$DbBak ->restoreDb('mybbs',array('board','face','friendsite'))
PHP 코드
$DbBak->restoreDb('mybbs','board'); 🎜>PHP 코드
require_once('TableBak.php'); 
class DbBak { 
var $ _mysql_link_id;
var $_tableList;
function DbBak($_mysql_link_id,$dataDir) _string($dataDir) ) || strlen($dataDir)==0) && die('error:$datadir은 문자열이 아닙니다.')
!is_dir( $dataDir) && mkdir($dataDir);
$this-> ; _datadir = $ datadir;
$ this- & gt; $ tablename = null)
{ ((! IS_STRING ($ dbName)) || strlen($dbName)==0 ) && die('$dbName은 문자열 값이어야 합니다.'); //단계2: 데이터베이스 백업 디렉터리 생성
$dbDir = $this->_dataDir.DIRECTORY_SEPARATOR.$dbName;
!is_dir($dbDir) && mkdir($dbDir)
//3단계: 모든 테이블 이름 가져오기 데이터베이스를 삭제하고 테이블 백업을 시작합니다
$this->_TableBak = new TableBak($this->_mysql_link_id,$dbDir)
if(is_null($tableName)){//backup all table in db
$this->_backupAllTable($dbName);
return
}
if(is_string($tableName)){
(strlen($tableName)==0) && die('....');
$this->_backupOneTable($dbName,$tableName)
return;
}
if (is_array($tableName)); 🎜>foreach ($tableName as $table){ 
( (!is_string($table)) || strlen($table)==0) && die('....'); 

$this->_backupSomeTalbe($dbName,$tableName); 
return; 
} 
}
function RestoreDb($dbName,$tableName=null){
( (!is_string($dbName)) || strlen($dbName)==0 ) && die('$dbName은 문자열 값이어야 합니다.' );  
//단계1: 데이터베이스가 있는지 확인하고 연결합니다.                      >//단계2: 데이터베이스 백업 디렉터리가 있는지 확인합니다.
$dbDir = $this->_dataDir.DIRECTORY_SEPARATOR.$dbName; !is_dir($dbDir) && die("$dbDir이 존재하지 않음");
//step3:복원 시작
$this->_TableBak = new TableBak($this->_mysql_link_id,$dbDir);
if(is_null($tableName)){//db의 모든 테이블 백업
$this->_restoreAllTable($dbName)
return;
}
if(is_string( $tableName)){
(strlen($tableName)==0) && die('....')
$this->_restoreOneTable($dbName,$tableName)
return ;
}
if (is_array($tableName)){
foreach ($tableName을 $table로){ 
( (!is_string($table)) || strlen($table)== 0) && die('....'); 

$this->_restoreSomeTalbe($dbName,$tableName) ); >_mysql_link_id); ush( $tableList,mysql_tablename($result, $i));
}
mysql_free_result($result)
return $tableList; $dbName)
{
foreach ($this->_getTableList($dbName) as $tableName){
$this->_TableBak->backupTable($tableName); $tableName) 
{ 
!in_array($tableName,$this->_getTableList($dbName)) && die("지정된 테이블 이름$tableName 데이터베이스에 존재하지 않습니다." );
$this->_TableBak->backupTable($tableName)
}
function _backupSomeTalbe($dbName,$TableNameList) ($TableNameList as $tableName){
!in_array( $tableName,$this->_getTableList($dbName)) && die("지정된 테이블 이름$tableName이 데이터베이스에 존재하지 않습니다.")
}
foreach( $TableNameList as $tableName){
$this->_TableBak->backupTable($tableName);
function _restoreAllTable($dbName)
{
//1단계: 모든 데이터 테이블의 백업 파일이 존재하는지, 쓰기 가능한지 확인:
foreach ($this->_getTableList($dbName ) $tableName으로){
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR
$dbName.DIRECTORY_SEPARATOR
$tableName.DIRECTORY_SEPARATOR                                                              is_writeable ($tableBakFile) && die("$tableBakFile이 존재하지 않거나 쓸 수 없음" ); { 
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR 
                                   
$tableName.'.sql'; ;_TableBak->restoreTable($tableName,$ tableBakFile); 
} 
} 
function _restoreOneTable($dbName,$tableName) 
{ 
//1단계: 데이터 테이블이 존재하는지 확인: 
!in_array($tableName, $this->_getTableList($dbName)) && die("지정된 테이블 이름$tableName이 데이터베이스에 존재하지 않습니다.");
//2단계: 데이터 테이블 백업 여부 확인 파일이 존재하며 쓰기 가능 여부:
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR
. $dbName.DIRECTORY_SEPARATOR
.                                                                $tableName.'.sql'
!is_writeable($tableBakFile ) && die("$tableBakFile이 없거나 기록할 수 없음");
//3단계:복원 시작
$this->_TableBak-> ;restoreTable($tableName,$tableBakFile);                                       $tableName으로){
!in_array($tableName,$this->_getTableList($dbName)) && die("지정된 테이블 이름$tableName이 데이터베이스에 없습니다.")
}
///2단계: 데이터 테이블 백업 파일이 있는지, 쓰기 가능한지 확인:
foreach ($TableNameList as $tableName){
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR
. $dbName.DIRECTORY_SEPARATOR . $tableName.DIRECTORY_SEPARATOR . 🎜>!is_writeable ($tableBakFile) && die("$tableBakFile이 없거나 쓸 수 없음")    
//step3:복원 시작:    
foreach ($TableNameList as $tableName){    
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR    
               . $dbName.DIRECTORY_SEPARATOR    
               . $tableName.DIRECTORY_SEPARATOR    
               . $테이블이름.'.sql';    
$this->_TableBak->restoreTable($tableName,$tableBakFile);    
}    
}    
}    
?>     

复代码 代码如下:

& lt;? PHP
// DBBAK만 이 클래스를 호출할 수 있습니다.
function TableBak($mysql_link_id,$dbDir)
{
$this->_mysql_link_id = $ mysql_link_id
$this->_dbDir = $dbDir;
}    
function backupTable($tableName) 
{ 
//1단계: 테이블의 백업 디렉터리 이름을 만듭니다. 
$tableDir = $this->_dbDir.DIRECTORY_SEPARATOR.$tableName; 
!is_dir($tableDir) && mkdir($tableDir);                                                > @file($tableBakFile) 또는 die("$tableBakFile 파일을 열 수 있음"); 
$num = count($fileArray); 
mysql_unbuffered_query("DELETE FROM $tableName"); fileArray[0]; 
for ($i=1;$i<$num-1;$i){  
mysql_unbuffered_query( $sql.$fileArray[$i]) 또는 (die (mysql_error()) ); 배열();
$sql="SELECT * FROM $tableName LIMIT 1";
$result = mysql_query($sql,$this->_mysql_link_id)
$num_field=mysql_num_fields($ 결과) ;
$fieldInfo[$field_name] = $field_type;
mysql_free_result($result); fieldInfo,$row) {  
$row as $field_name=> $field_value){  
$field_value=strval($field_value);  
switch($fieldInfo[$field_name]){   
case "blob" :        $row[$field_name] = "'".mysql_escape_string( $field_value)."'";break;                                                                                                                '";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);
case "real": $row[$field_name] = intval($field_value)
case "timestamp":$row[$field_name] = intval($field_value);
기본값: $row[$field_name] = intval($field_value)
}
}
return $row;
}
function _backupTable($tableName,$tableDir)
{
//테이블의 필드 유형 가져오기:
$fieldInfo = $this-> ;_getFieldInfo ($tableName);
//step1: INSERT 문의 전반부를 구성하고 파일에 씁니다:
$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("$datafile 파일을 열 수 없습니다.")
(!fwrite($handle, $sqltext)) && die ("$datafile 파일에 데이터를 쓸 수 없습니다."); 
fclose($handle); 
//2단계: 데이터를 얻고 파일에 씁니다: 
//Get 테이블 리소스: 
set_time_limit (0);
$sql = "$tableName에서 * 선택";
$result = mysql_query($sql,$this->_mysql_link_id)//Open 데이터 백업 파일: $tableName.xml                                                                           $datafile");
/ /테이블 레코드를 하나씩 가져와서 파일에 씁니다: ($fieldInfo,$row); 
$record= '(' . implode(',',$row) . ");rn";  
(!fwrite($handle, $record)) && die ("$datafile< 파일에 데이터를 쓸 수 없습니다. ;/b>");
}
mysql_free_result($result);
//파일을 닫습니다: ;  
return true; >require_once('DbBak.php');
require_once ('TableBak.php');
$connectid = mysql_connect('localhost','root','123456')
$backupDir = 'data'
$DbBak($connectid ,$backupDir);
$DbBak->backupDb('mybbs');
코드 복사

코드는 다음과 같습니다.


require_once('DbBak .php'); mysql_connect('localhost','123456');

$backupDir = '데이터'; $DbBak($connectid,$backupDir); 🎜>$DbBak->restoreDb ('mybbs')


위에서는 postgresql 데이터베이스의 내용을 포함하여 mysql 데이터베이스 백업 클래스의 postgresql 데이터베이스 PHP 구현을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿