2012-06-03 7 views
4

프로젝트 용 백업 스크립트를 만들고 있는데,이 스크립트는 cron을 통해 실행됩니다.순수 PHP5에서 MySQL 덤프 생성

<?php 
include("config.php"); 

/* Misc */ 
$pathtobackup = realpath('.'); 
$backupfolder = realpath("backup"); 
$sqlfilename = "SQLDUMP-".date("d-m-Y--H-i").".sql"; 
$backupfilename = "BACKUP-".date("d-m-Y--H-i").".zip"; 
$backupfilepath = $backupfolder."/".$backupfilename; 

/* Systemcall */ 
exec("/usr/bin/mysqldump -u{$mysqluser} -p{$mysqlpw} -h {$mysqlserver} {$mysqldb}", $sqldata, $fp); 

$sqldump = implode("\n", $sqldata); 

if ($fp!=0){ 
    die("could not create mysql dump\n"); 
} 

/* Create Zip */ 
$zip = new ZipArchive(); 

if ($zip->open($backupfilepath, ZIPARCHIVE::CREATE)!==TRUE) { 
    die("cannot open <{$backupfilepath}>\n"); 
} 


$path = realpath('.'); 

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathtobackup, FilesystemIterator::SKIP_DOTS)); 

foreach($iterator as $name=>$object){ 

    $zip->addFile($name); 

} 

$zip->addFromString($sqlfilename, $sqldump); 

if ($zip->close()!==TRUE) { 
    die("cannot write <{$backupfilepath}>\n"); 
} 

?> 

하지만 아무도이 어디 있는지 좀 더 호환되도록 너무 다른 서버에서 사용 할 수 있도록 MySQL은 순수 PHP와 덤프 생성 하시겠어요 :

지금은 사용하고 systemmysqldump을 사용하는 방법.

나는 당신이 당신이 정말로 여기에 다음이 방법을 고려해야 할 몇 mysql 쿼리입니다해야 할 경우 150 파일 libary :

인사말, 프레드릭

+0

$dumpSettingsDefault = array( 'include-tables' => array(), 'exclude-tables' => array(), 'compress' => 'None', 'no-data' => false, 'add-drop-database' => false, 'add-drop-table' => false, 'single-transaction' => true, 'lock-tables' => false, 'add-locks' => true, 'extended-insert' => true, 'disable-foreign-keys-check' => false, 'where' => '', 'no-create-info' => false ); 
이 일에 관해서는 정말로 자신감을 불러 일으키지 않는다. 예를 들어,'PHPMyAdmin'은 PHP에서 수년간 해왔으며, 이번에는 모든 문제의 근원이되었습니다. – lanzz

답변

1

을 사용하여와 해결책을 알고 희망 같은 스크립트를 작성하는 동안 :

SHOW TABLES을 - 모든 데이터베이스 테이블 이름은 반환

SHOW CREATE TABLE table_name는 타를 만드는 데 사용되는 SQL 쿼리를 반환 저장 프로 시저 및 함수

SHOW CREATE PROCEDURE procedure_name 및 저장 프로 시저를 만드는 데 사용 SHOW CREATE FUNCTION function_name -return 쿼리와 기능

나머지는 보통 SELECTINSERT 쿼리이다의 반환 목록 -

SHOW PROCEDURE STATUSSHOW FUNCTION STATUS을 BLE.

0

여기를보세요 : https://github.com/ifsnop/mysqldump-php! 그것은

당신은 작곡가를 사용하여 설치할 수 있습니다 ... 저장 프로 시저, 트리거, 뷰의 hexblobs, regexps '에를 지원하는 테스트를, PHP로 작성된 기본 솔루션이며, 그것은 일을하는 것만 큼 쉽습니다 :

<?php 

use Ifsnop\Mysqldump as IMysqldump; 

try { 
    $dump = new IMysqldump\Mysqldump('database', 'username', 'password'); 
    $dump->start('storage/work/dump.sql'); 
} catch (\Exception $e) { 
    echo 'mysqldump-php error: ' . $e->getMessage(); 
} 

?> 

원래의 mysqldump에서 많은 옵션을 복사하여 고급 사용자를 지원합니다.

모든 옵션은 GitHub의 페이지에 설명되어 있지만, 어느 정도는 자동으로 설명이되는 (문서에서 작은 조각)입니다 :

데이터베이스를 덤핑하는 것은 그리 때문에 나는 그것에 대하여 추천 할 것입니다