PHP는 MySQL 데이터베이스 백업 및 복원 클래스 example_php 기술을 구현합니다.

WBOY
풀어 주다: 2016-05-16 20:28:43
원래의
940명이 탐색했습니다.

이 기사의 예에서는 PHP에서 MySQL 데이터베이스 백업 및 복원 클래스를 구현하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

PHP를 사용하여 mysql 데이터베이스를 백업하는 매우 간단한 클래스 파일입니다. dbmange에서 연결 주소, 사용자 이름 및 데이터베이스만 구성하면 됩니다. 코드는 다음과 같습니다. :

코드 복사 코드는 다음과 같습니다.
/**
* 작성일 : 2012년 5월 21일
*
* 참고: 볼륨 파일은 _v1.sql(20120522021241_all_v1.sql)로 끝납니다
* 기능: mysql 데이터베이스 볼륨 백업 구현, 백업할 테이블 선택, 단일 sql 파일 및 볼륨 sql 가져오기 구현
* 사용방법 :
*
* ------1. 데이터베이스 백업(내보내기) --------------------- -- -----------
//호스트, 사용자 이름, 비밀번호, 데이터베이스 이름, 데이터베이스 인코딩입니다
$db = 새 DBManage( 'localhost', 'root', 'root', 'test', 'utf8' )
// 매개변수: 백업할 테이블(선택 사항), 백업 디렉터리(선택 사항, 기본값은 백업), 볼륨 크기(선택 사항, 기본값은 2000, 즉 2M)
$db->백업()
* ------2. 데이터베이스 복구(가져오기) ----------- -----------
//호스트, 사용자 이름, 비밀번호, 데이터베이스 이름, 데이터베이스 인코딩입니다
$db = 새 DBManage( 'localhost', 'root', 'root', 'test', 'utf8' )
//매개변수: SQL 파일
$db->복원('./backup/20120516211738_all_v1.sql')
*------------------------------------------------ - ------------
​*/
클래스 DB관리
{
var $db; // 데이터베이스 연결
var $database; // 사용된 데이터베이스
var $sqldir; // 데이터베이스 백업 폴더
var $레코드
// 줄바꿈 문자
비공개 $ds = "n"
// SQL을 저장할 변수
공개 $sqlContent = ""
// 각 SQL 문의 끝 문자
공개 $sqlEnd = ";"
/** 
     * 初始화 
     * 
     * @param 문자열 $host
     * @param 문자열 $username 
     * @param 문자열 $password
     * @param 문자열 $thisatabase 
     * @param 문자열 $charset 
    */
함수 __construct($host = 'localhost', $username = 'root', $password = '', $thisatabase = 'test', $charset = 'utf8')

            $this->host = $host;                                                     $this->username = $username;                                                    $this->password = $password;                                                     $this->database = $thisatabase;                                                   $this->charset = $charset;                                       >                                                         $this->db = mysql_connect ( $this->host, $this->username, $this->password ) 또는 die ( "데이터베이스 연결에 실패했습니다." );               // 사용할 데이터베이스 선택                                                                      mysql_select_db ( $this->database, $this->db ) 또는 die ( "데이터베이스를 열 수 없습니다"
// 데이터베이스 인코딩 방법 mysql_query( 'SET NAMES' . $this->charset, $this->db
}  
 
/*
*------------------데이터베이스 백업 시작---- ------------------------------------- ----
*/
 
/**
* 데이터베이스 백업
* 매개변수: 백업할 테이블(선택 사항), 백업 디렉터리(선택 사항, 기본값은 백업), 볼륨 크기(선택 사항, 기본값은 2000, 즉 2M)
* *
* @param $string $dir
* @param int $size
* @param $string $tablename
​​*/
함수 백업($tablename = '', $dir = '', $size = 2000)

//$dir = $dir ? $dir : '백업/'
//$크기 = $크기 ? $크기 : 2000;           $sql = '';                                    // 특정 테이블만 백업
If (!emptyempty ( $tablename ))
~ echo '테이블 백업 중' . '
';                                       // 덤프 정보 삽입 $sql = $this->_retrieve()
//테이블 구조 정보 삽입
$sql .= $this->_insert_table_structure ( $tablename ); |                 $data = mysql_query ( "select * from " . $tablename ); | 파일 이름의 일부 $filename = 날짜( 'YmdHis' ) . $tablename;                             // 필드 수                                                                             $num_fields = mysql_num_fields ($data);                                      >                              사용                                                                                                                                         // 각 레코드를 반복합니다.                 while ( $record = mysql_fetch_array ( $data ) )                                                                                                // 단일 레코드                          $sql .= $this->_insert_record ( $tablename, $num_fields, $record ); / If (strlen ( $sql ) >= $size * 1000)
~ $파일 = $파일명 . "_v" . ".sql"; If ($this->_write_file ($sql, $file, $dir))
~ echo "table-" . $tablename . "-volume-" . $p . "-데이터 백업이 완료되고 백업 파일이 생성됩니다$dir$filename< ;br />";
~ 또 다른 ~ echo "백업 테이블-" . $tablename . "-실패
"; ~ // 다음 하위 롤 >> ~                                                                                                                // $sql 변수를 비우도록 재설정하고 다시 계산합니다. 변수의 크기
$sql = ""
~ ~ // SQL의 크기가 충분하지 않습니다. If ($sql != "")
                                                           $파일명 .= "_v" . $p
If ($this->_write_file ($sql, $filename, $dir))
~ echo "table-" . $tablename . "-volume-" . $p . "-데이터 백업이 완료되고 백업 파일이 생성됩니다$dir$filename< ;br />";
~ 또 다른 ~ ~   에코 "백업 볼륨-"과 함께 . "-실패
";  ~ ~ ~             else  
{ // 모든 테이블 백업
If ($tables = mysql_query ( "show table status from " . $this->database ))
                                                           echo "데이터베이스 구조를 성공적으로 읽었습니다!
"; ~ 또 다른                                                            ~ ~                                                  . ~                                       // 덤프 정보 삽입 $sql .= $this->_retrieve()
| 파일 이름의 일부                  $filename = 날짜( 'YmdHis' ) "_all";                                      // 모든 테이블 찾기                                                  $tables = mysql_query ( '테이블 표시' ); >                              사용                                                                                             // 모든 테이블을 반복
                 while ( $table = mysql_fetch_array ( $tables ) )                                                                                                   // 테이블 이름 가져오기 $테이블이름 = $테이블 [0]
// 테이블 구조 가져오기 ~ | sql .= $this->_insert_table_structure ($tablename);                       $data = mysql_query ( "select * from " . $tablename );                                                                     $num_fields = mysql_num_fields ($data);                        
// 각 레코드를 반복합니다
동안($ 레코드 = MySQL_FETCH_ARAY($ 데이터))
~ ~ | ~ ~     $sql .= $this->_insert_record ($tablename, $num_fields, $record); ~ // 볼륨 크기보다 크면 파일을 쓰십시오. If (strlen ( $sql ) >= $size * 1000)
~  
$파일 = $파일명 . "_v" . ".sql"; // 파일 쓰기 If ($this->_write_file ($sql, $file, $dir))
~ echo "-볼륨-" . $p . "-데이터 백업 완료, 백업 파일 생성$dir$file
"; > ~ 또 다른 ~ echo "백업 볼륨-" . $p "-실패
"; ~ // 다음 하위 롤 > ~ ~ ~               // $sql 변수를 빈 상태로 재설정하고 변수 크기를 다시 계산합니다.
                                  $sql = "";                                     ~ ~~ // SQL의 크기가 충분하지 않습니다. If ($sql != "")
                                                           $파일명 .= "_v" . $p
If ($this->_write_file ($sql, $filename, $dir))
~ Echo "-". $ P. "-데이터 백업이 완료되었습니다. 백업 파일 생성 & lt; 스팬 스타일 = 'color:#f00;' $ dir $ filename & lt; br /& gt;"; >> ~ 또 다른 ~ ~   에코 "백업 볼륨-"과 함께 . "-실패
";  ~ ~ ~ }  
 
/**
* 기본 데이터베이스 백업 정보 삽입
* *
* @return 문자열
​​*/
비공개 함수 _retrieve() {
          $value = '';                                       $value .= '--' . $this->ds;            $value .= '-- $this->ds;                                       $value .= '-- DBManage 클래스에 의해 생성됨, $this->ds; ' .                             $value .= '-- http://yanue.net ' . $this->ds;                               $value .= '--' . $this->ds; $value .= '-- 호스트: ' . $this->ds; $value .= '-- 날짜 생성: ' . 날짜( 'm' ) . 날짜( 'H: i' ) . $this->ds
           $value .= '-- MySQL 버전: ' . mysql_get_server_info () $this->ds;            $value .= '-- PHP 버전: ' . $this->ds;                                $value .= $this->ds;                                                  $value .= '--' . $this->ds; $value .= '-- 데이터베이스: `' . $this->데이터베이스 '`' . $this->ds; $value .= '--' . $this->ds
$value .= '------------------- ----- ------------'; $value .= $this->ds
           $value 반환;                                       }  
 
/**
* 테이블 구조 삽입
* *
* @param 알 수 없는_유형 $테이블
* @return 문자열
​​*/
전용 함수 _insert_table_structure($table) {
          $sql = '';                                    $sql .= "--" . $this->ds;              $sql .= "--테이블 구조" . $this->ds;                        $sql .= "--" . $this->ds
 
// 테이블이 존재하면 삭제
$sql .= "존재하는 경우 테이블 삭제" . $this->sqlEnd
// 자세한 테이블 정보 얻기
          $res = mysql_query ( 'SHOW CREATE TABLE `' . $table . '`' );           $row = mysql_fetch_array ($res);                                                 $sql .= $row [1];                                       $sql .= $this->sqlEnd .$this->ds; // 추가하다            $sql .= $this->ds;                                         $sql .= "--" . $this->ds;              $sql .= "-- 테이블의 데이터 전송 " . $this->ds;                        $sql .= "--" . $this->ds;            $sql .= $this->ds;                                                    $sql 반환;                                       }  
 
/**
* 단일 레코드 삽입
* *
* @param 문자열 $table
* @param int $num_fields
* @param 배열 $record
* @return 문자열
​​*/
비공개 함수 _insert_record($table, $num_fields, $record) {
// 쉼표로 구분된 SQL 필드
          $insert = $comma = "";                   $insert .= "INSERT INTO `" . $table . "` VALUES(";
                            // 각 하위 섹션 아래에서 콘텐츠를 반복합니다.                                for($i = 0; $i                  $insert .= ($comma . "'" .mysql_real_escape_string ( $record [$i] ) . "'");                $comma = ",";                                     ~ $insert .= ");" .            $insert 반환;                                         }  
 
/**
* 파일에 쓰기
* *
* @param 문자열 $sql
* @param 문자열 $filename
* @param 문자열 $dir
* @return 부울
​​*/
전용 함수 _write_file($sql, $filename, $dir) {
$dir = $dir ? $dir : './백업/'
//폴더가 없으면 생성하세요
If (!file_exists ( $dir )) {
                        mkdir ( $dir );                                     ~          $re = true;                                  If (! @$fp = fopen ( $dir . $filename, "w " )) {
                    $re = false;                              echo "파일을 열지 못했습니다!"; ~ If (! @fwrite ( $fp, $sql )) {
                    $re = false;                                                 echo "파일을 쓰지 못했습니다. 파일이 쓰기 가능한지 확인하세요."; ~If (! @fclose ( $fp )) {
                    $re = false;                              echo "파일을 닫지 못했습니다!"; ~           $re 반환;                                     }  
 
/*
* *
* --------------- 위: 데이터베이스 내보내기 ----------- 구분선 - --- ------다음: 데이터베이스 가져오기------------------
*/
 
/**
* 백업 데이터 가져오기
* 설명 : 볼륨 파일 형식 20120516211738_all_v1.sql
*파라미터 : 파일경로(필수)
* *
* @param 문자열 $sqlfile
​​*/
함수 복원($sqlfile)

// 파일이 존재하는지 확인
If (!file_exists ( $sqlfile ))
~ 종료("파일이 없습니다. 확인해주세요"); ~            $this->lock ( $this->database );                                                 // 데이터베이스 저장 위치 가져오기
           $sqlpath = pathinfo ($sqlfile);                                                $this->sqldir = $sqlpath ['dirname'];                                              ~ >           $volume = 폭발( "_v", $sqlfile );                                      $volume_path = $volume [0];                                      echo "프로그램이 종료되는 것을 방지하려면 브라우저를 새로 고치거나 닫지 마세요. 주의하지 않으면 데이터베이스 구조가 손상될 수 있습니다.
"; echo "백업 데이터를 가져오는 중입니다. 잠시 기다려 주세요!
"; If (비어 있음 ( $volume [1] ))
~                               echo "sql 가져오기: '
'; 
>                                                                                                        ’ ’ 는 ’로 나누지 않음 ’s ’ to ’ to ’ to ’ to to to to to to to to to to to to to to to to tobe for so so so so so so so, If ($this->_import ( $sqlfile )) {
echo "데이터베이스를 성공적으로 가져왔습니다!"; ~ 또 다른                                                            종료( '데이터베이스 가져오기 실패!' ); ~ ~             else  
~                      //$volume_id = array();                           // 스크롤이 있으면 현재가 현재 롤이고 나머지 스크롤은 사이클에 의해 수행됩니다.
                $volume_id = 폭발( ".sq", $volume [1] ); //현재 볼륨은 $volume_id
                 $volume_id = intval ( $volume_id [0] );                                                    동안( $volume_id )                                                                                                    $tmpfile = $volume_path . "_v" . $volume_id
// 다른 스크롤이 있으니 계속 실행하세요
If (파일_존재( $tmpfile )) {
| ~                                    echo "볼륨을 가져오는 중" $tmpfile . If ($this->_import ($tmpfile))
~  
~ 또 다른 ~ Exit ( "볼륨 가져오기" . $tmpfile . '실패했습니다! 데이터베이스 구조가 손상되었을 수 있습니다! 볼륨 1에서 가져오기를 시도해 보세요.' ) ; > ~ ~ 또 다른 ~ echo "이 볼륨의 모든 백업을 성공적으로 가져왔습니다!
"; 반품
~                            $volume_id;                                     ~ ~ }  
 
/**
* SQL을 데이터베이스로 가져오기(일반 가져오기)
* *
* @param 문자열 $sqlfile
* @return 부울
​​*/
전용 함수 _import($sqlfile) {
                 // sql 파일에 포함된 sql 문 배열
           $sqls = 배열();                                          $f = fopen ( $sqlfile, "rb" );                                    //테이블 버퍼 변수 생성
          $create = '';                                                 while ( ! feof ( $f ) ) {                                  // SQL의 각 줄을 읽습니다
$라인 = fgets($f)
                                  // '--' 등의 설명이 포함되어 있거나 빈 줄인 경우 건너뛰세요
If (trim ( $line ) == '' || preg_match ( '/--*?/', $line, $match )) {
계속하세요
~ ~ ~ If (! preg_match ( '/;/', $line, $match ) || preg_match ( '/ENGINE=/', $line, $match )) {
// 이 SQL 문과 생성된 테이블을 SQL 연결로 저장
                       $create .= $line;                              // 테이블 생성의 마지막 문장이 포함된 경우
If (preg_match ( '/ENGINE=/', $create, $match )) {
| >                                                        //현재 테이블을 지우고 다음 테이블 생성 준비
$create = '';
~ | 계속하세요
~                  $sqls [] = $line;                                         ~            fclose ( $f );                                                           // SQL 문 배열을 반복하고 별도로 실행합니다.
foreach ( $sqls를 $sql로 ) {
              str_replace ( "n", "", $sql )
If (!mysql_query ( Trim ( $sql ) )) {
에코 mysql_error ()
                          false 반환;                                 ~ ~          true를 반환합니다.                                    }  
 
/*
* ------------------데이터베이스 가져오기 끝--------------- - -----------------
*/
 
//데이터베이스 연결 닫기
개인 함수 close() {
mysql_close($this->db)
}  
 
// 백업 또는 가져오기 중 오류를 방지하기 위해 데이터베이스를 잠급니다.
개인 기능 잠금($tablename, $op = "WRITE") {
If (mysql_query ( "lock tables " . $tablename . " " . $op ))
                  true를 반환합니다.                                                else  
                  false 반환;                                     }  
 
// 잠금 해제
개인 함수 잠금 해제() {
If (mysql_query ( "테이블 잠금 해제" ))
                  true를 반환합니다.                                                else  
                  false 반환;                                     }  
 
//파괴
함수 __destruct() {
mysql_query("테이블 잠금 해제", $this->db
mysql_close($this->db)
}
}

$db = 새 DBManage( 'localhost', 'root', '', 'tao', 'gbk' )
//$db->백업 ('tao_admin')
$db->restore ('./backup/20140228222713_tao_admin_v1.sql')
?>
이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.

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