2013-03-25 162 views
-1

我試圖執行PHP/MySQL的備份備份用PHP整個數據庫/ MYSQL

我從表單頁面接收值,然後使用命令「選擇表」,我保存一個陣列中的這些值。

後,我做了一個「for」循環備份每個表:

<?php 

$dbname = $_POST['txt_db_name']; 
$tbname = $_POST['txt_tb_name']; 

$ligacao=mysql_connect('localhost','root','') 
or die ('Problemas na ligação ao Servidor de MySQL'); 

$res = mysql_query("SHOW TABLES FROM pessoal"); 

$tables = array(); 

mysql_select_db($dbname,$ligacao); 

while($row = mysql_fetch_array($res, MYSQL_NUM)) { 
$tables[] = "$row[0]"; 
} 

$length = count($tables); 


for ($i = 0; $i < $length; $i++) { 
$query= 
"SELECT * INTO OUTFILE 'pessoa_Out.txt'". 
"FIELDS TERMINATED BY ',' ". 
"ENCLOSED BY '\"'". 
"LINES TERMINATED BY '#'". 
"FROM $tables[$i]"; 


$resultado = mysql_query($query,$ligacao); 

} 



mysql_close(); 

if ($resultado) 
$msg ='Sucesso na Exportaçao da Database '.$dbname.' '; 
else 
$msg ='Erro Impossivel Exportar a Database '.$tbname.' '; 

?> 
+1

您的問題是什麼......>? – 2013-03-25 10:50:59

+0

http://sypex.net/en/ – 2013-03-25 11:04:05

回答

5

不要這樣 - 你是重新發明現有的工具!

改爲調用mysqldump,這是專門爲此目的而設計的。

使用適當的權限,您可以使用PHP的systemexec來調用它。

+0

事實上,mysqldump實用程序是用於備份目的(並且它是備份數據庫的最快方法)。 – bodi0 2013-03-25 10:51:46

+0

我知道我的mysqldump,不幸的是我是一名學生,我的老師希望以這種方式進行備份。 – user2180246 2013-03-25 10:54:45

+1

@ user2180246如何隨意。 – 2013-03-25 11:10:52

1

首先,我同意那些說應該使用mysqldump的人。但基於你的評論,你只需要用php/mysql來完成教育(或其他)目的,這裏是腳本(它是重新發明輪子)。請注意,您應該在上傳此文件夾的文件夾中創建一個備份目錄,並允許Web服務器向其中寫入:

<?php 
error_reporting(E_ALL); 
ini_set('display_errors',1); 
ini_set('memory_limit','1500M'); 
set_time_limit(0); 

backup_tables('localhost','user','xxxxxxx','xxxxxxxxxx'); 

/* backup the db OR just a table */ 
function backup_tables($host,$user,$pass,$name,$tables = '*') 
{ 
    //save file 
    $handle = gzopen(getcwd() . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'db-backup-'.time().'.sql.gz','w9'); 

    $link = mysql_connect($host,$user,$pass); 
    mysql_select_db($name,$link); 

    //get all of the tables 
    if($tables == '*') 
    { 
    $tables = array(); 
    $result = mysql_query('SHOW TABLES'); 
    while($row = mysql_fetch_row($result)) 
    { 
     $tables[] = $row[0]; 
    } 
    } 
    else 
    { 
    $tables = is_array($tables) ? $tables : explode(',',$tables); 
    } 

    //cycle through 
    foreach($tables as $table) 
    { 
    $result = mysql_query('SELECT * FROM '.$table); 
    $num_fields = mysql_num_fields($result); 

    $return = 'DROP TABLE IF EXISTS '.$table.';'; 
    $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table)); 
    $return .= "\n\n".$row2[1].";\n\n"; 
    gzwrite($handle,$return); 
    for ($i = 0; $i < $num_fields; $i++) 
    { 
     while($row = mysql_fetch_row($result)) 
     { 
     $return = 'INSERT INTO '.$table.' VALUES('; 
     for($j=0; $j<$num_fields; $j++) 
     { 
      $row[$j] = addslashes($row[$j]); 
      $row[$j] = str_replace("\n","\\n",$row[$j]); 
      if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; } 
      if ($j<($num_fields-1)) { $return.= ','; } 
     } 

     $return.= ");\n"; 
     gzwrite($handle,$return); 
     } 
    } 
    $return ="\n\n\n"; 
    gzwrite($handle,$return); 
    } 


    gzclose($handle); 
} 
+0

謝謝我的老師有點老派,希望我們創建自己的解決方案。但是,這可以按我的方式完成嗎? – user2180246 2013-03-25 11:01:53