2012-06-03 38 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

我希望你知道使用150文件libary :)

問候, 弗雷德裏克

+0

我會建議反對,因爲轉儲數據庫是一個不那麼這是一項平凡的任務,並且對此提出質疑並不能真正激發人們的信心。舉個例子,'PHPMyAdmin'多年來一直在PHP中使用它,這一直是問題的來源。 – lanzz

回答

1

如果你真的必須這樣做,這樣,然後這裏有您應該考慮的幾個mysql查詢用了一個解決方案而建立這樣的腳本:

SHOW TABLES - 返回所有的數據庫表名

SHOW CREATE TABLE table_name返回用於創建TA SQL查詢竹葉提取

SHOW PROCEDURE STATUSSHOW FUNCTION STATUS - 回報的存儲過程和函數

SHOW CREATE PROCEDURE procedure_name和用於創建存儲過程SHOW CREATE FUNCTION function_name -return查詢和功能

其餘的都是平常SELECTINSERT查詢列表。

0

看看這裏:https://github.com/ifsnop/mysqldump-php!它是用PHP編寫的,與測試本機的解決方案,支持存儲過程,觸發器,視圖hexblobs,正則表達式...

您可以使用安裝作曲家它,它是那麼容易,因爲這樣做的:

<?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上頁解釋,但或多或​​少都自動explicative(從文件一小段代碼):

$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 
);