2013-03-25 158 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