PHP를 통해 mysql 데이터를 백업하는 코드
풀어 주다: 2016-07-25 08:43:14
-
- ##################
- //구성
- ###################
- // 백업 디렉터리 이름 정의
- define('BACKUP_DIR', './myBackups' ) ;
- // 데이터베이스 자격 증명 정의
- define('HOST', 'localhost' ) ;
- define('USER', 'testd!b' ) ;
- define('PASSWORD', 'k ^$2y4n9@#VV' ) ;
- define('DB_NAME', 'test123' ) ;
- /*
- SQL 파일의 파일 이름을 정의하세요
- 파일을 Amazon의 S3 서비스는 소문자만 사용하세요
- */
- $fileName = 'mysqlbackup--' . 날짜('d-m-Y') . '@'.date('h.i.s').'.sql' ;
- // 실행 시간 제한 설정
- if(function_exists('max_execution_time')) {
- if( ini_get('max_execution_time') > 0 ) set_time_limit(0) ;
- }
-
- #######################
-
- //구성 끝
-
- ########################
-
- // 다음 사항을 확인하세요. 디렉토리가 이미 생성되었으며 적절한 권한이 있습니다
- if (!file_exists(BACKUP_DIR)) mkdir(BACKUP_DIR , 0700) ;
- if (!is_writable(BACKUP_DIR)) chmod(BACKUP_DIR , 0700) ;
-
- // ".htaccess" 파일을 생성하면 백업 디렉터리에 대한 직접 액세스가 제한됩니다.
- $content = 'deny from all' ;
- $file = new SplFileObject(BACKUP_DIR . '/.htaccess' , "w") ;
- $file->fwrite($content) ;
-
- $mysqli = new mysqli(HOST , USER , PASSWORD , DB_NAME) ;
- if (mysqli_connect_errno())
- {
- printf("연결 실패: %s", mysqli_connect_error());
- exit();
- }
- // 소개 정보
- $return .= "-- n";
- $return .= "-- MySQL 백업 시스템 n";
- $return .= "--n";
- $return .= '-- 내보내기 생성됨: ' . 날짜("연/월/일") . ' 에 ' . 날짜("h:i") . "nnn";
- $return = "--n";
- $return .= "-- 데이터베이스: " . DB_NAME. "n";
- $return .= "--n";
- $return .= "-- ---------- --------------n";
- $return .= "-- ---------- ---------------n";
- $return . = '자동 커밋 설정 = 0;' ."n" ;
- $return .= 'SET FOREIGN_KEY_CHECKS=0 ;' ."n" ;
- $tables = array() ;
- // 이 데이터베이스에 어떤 테이블이 있는지 탐색
- $result = $mysqli->query('SHOW TABLES' ) ;
- // "$result"를 순환하고 콘텐츠를 배열에 넣습니다
- while ($row = $result->fetch_row())
- {
- $tables[] = $row[0] ;
- }
- // 각 테이블을 순환
- foreach($tables as $table)
- {
- // 각 테이블의 콘텐츠 가져오기
- $result = $mysqli->query('SELECT * FROM '.$table) ;
- // 각 테이블의 필드(열) 수를 가져옵니다
- $num_fields = $mysqli->field_count ;
- // 테이블 정보 추가
- $return . = "--n" ;
- $return .= '-- 테이블 `' 의 테이블 구조. $테이블 . ''' . "n" ;
- $return .= "--n" ;
- $return.= '존재하는 경우 테이블 삭제 `'.$table.'`;' . "n" ;
- // 테이블 셰마 가져오기
- $shema = $mysqli->query('SHOW CREATE TABLE '.$table) ;
- // 테이블 셰마 추출
- $tableshema = $shema->fetch_row() ;
- // 코드에 table-shema 추가
- $return.= $tableshema[1].";" . "nn" ;
- // 각 테이블 행을 순환
- while($rowdata = $result->fetch_row())
- {
- // 테이블에 데이터를 삽입할 코드 준비
- $return .= 'INSERT INTO `'.$table .'` VALUES ( ' ;
- // 각 행의 데이터 추출
- for($i=0; $i<$num_fields; $i )
- {
- $return .= '"'.$rowdata[$i] . ""," ;
- }
- // 마지막 쉼표를 삭제합니다
- $return = substr(" $return", 0, -1) ;
- $return .= ");" ."n" ;
- }
- $return .= "nn" ;
- }
- // 연결을 닫습니다
- $mysqli->close() ;
- $return . = 'SET FOREIGN_KEY_CHECKS = 1; ' . "n" ;
- $return .= '커밋 ; ' . "n" ;
- $return .= 'SET AUTOCOMMIT = 1 ; ' . "n" ;
- //$file = file_put_contents($fileName , $return) ;
- $zip = new ZipArchive() ;
- $resOpen = $zip->open(BACKUP_DIR . '/' .$fileName.".zip" , ZIPARCHIVE::CREATE) ;
- if( $resOpen ){
- $zip->addFromString( $fileName , "$return" ) ;
- }
- $zip->close() ;
- $fileSize = get_file_size_unit(filesize(BACKUP_DIR . "/". $fileName . '.zip')) ;
- $message = <<< msg
-
백업 완료 ,
- 아카이브 이름은 $fileName 파일 크기는 $fileSize 입니다.
- 이 zip 아카이브는 보호된 디렉토리에 저장되어 있으므로 웹 브라우저를 통해 접근할 수 없습니다.
- 이 백업을 다른 파일 시스템으로 전송하는 것이 좋습니다. 즐겨 사용하는 FTP 클라이언트를 사용하여 아카이브를 다운로드하세요.
- msg;
- echo $message ;
-
- // 기능 파일 크기 뒤에 적절한 단위를 추가합니다.
- function get_file_size_unit($file_size){
- switch (true) {
- case ($file_size/1024 < 1) :
- return intval($file_size ) . " 바이트" ;
- 중단;
- 케이스 ($file_size/1024 >= 1 && $file_size/(1024*1024) < 1) :
- return intval($file_size/1024) ." KB " ;
- break;
- 기본값:
- return intval($file_size/(1024*1024)) ." MB" ;
- }
- }
复제代码
|
PHP, MySQL
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31