2012-04-04 29 views
14

Tôi được yêu cầu tạo và xuất khẩu cơ sở dữ liệu mysql với cấu trúc và dữ liệu của nó vào tệp .sql bằng cách sử dụng tập lệnh php chứ không phải phpmyadmin để người dùng có thể sao lưu dữ liệu của mình?Làm thế nào để xuất khẩu và nhập khẩu cơ sở dữ liệu mysql với dữ liệu của nó bằng cách sử dụng php script?

Có ai có ý tưởng về cách thực hiện điều đó không ??

Cảm ơn trước

+0

Liệu nó có thể chỉ là PHP? Luôn luôn có thể sử dụng mysqldump, và nếu nó cần phải là một kịch bản PHP, có thể sử dụng mysqldump thông qua exec. – Corbin

+1

Ghép [Cách dễ dàng để xuất bảng SQL mà không cần truy cập vào máy chủ hoặc phpMyADMIN] (http://stackoverflow.com/q/81934/), [mã php để xuất cơ sở dữ liệu mysql] (http://stackoverflow.com/q/2491728/90527), [Thực hành tốt nhất: Nhập tệp mySQL bằng PHP; tách truy vấn] (http://stackoverflow.com/q/1883079/90527) và có khả năng [nhiều người khác] (http://stackoverflow.com/search?q=PHP+MySQL+%2Bexport+%2Bimport). – outis

Trả lời

10

http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/using-php-to-backup-mysql-databases.aspx

hoặc

$tableName = 'mypet'; 
$backupFile = 'backup/mypet.sql'; 
$query  = "SELECT * INTO OUTFILE '$backupFile' FROM $tableName"; 
$result = mysql_query($query); 

hoặc

$backupFile = $dbname . date("Y-m-d-H-i-s") . '.gz'; 
$command = "mysqldump --opt -h $dbhost -u $dbuser -p $dbpass $dbname | gzip >  $backupFile"; 
system($command); 
+0

ai cũng biết cách nhập nó vào phpmyadmin thông qua tập lệnh php –

+0

Xem hướng dẫn. Có một phần tử sao lưu ''LOAD DATA INFILE' 'trong bảng' INTO TABLE $ tableName ';'. – binarious

14

AN TOÀN và GIẢI PHÁP LÀM VIỆC (phiên bản mới nhất tại địa chỉ: Export.php + Import.php)

EXPORT_TABLES("localhost","user","pass","db_name"); 
                 //or add 5th parameter(array) of specific tables: array("mytable1","mytable2","mytable3") 

Mã sản phẩm:

<?php 
//https://github.com/tazotodua/useful-php-scripts 
function EXPORT_TABLES($host,$user,$pass,$name, $tables=false, $backup_name=false){ 
    $mysqli = new mysqli($host,$user,$pass,$name); $mysqli->select_db($name); $mysqli->query("SET NAMES 'utf8'"); 
    $queryTables = $mysqli->query('SHOW TABLES'); while($row = $queryTables->fetch_row()) { $target_tables[] = $row[0]; } if($tables !== false) { $target_tables = array_intersect($target_tables, $tables); } 
    foreach($target_tables as $table){ 
     $result = $mysqli->query('SELECT * FROM '.$table); $fields_amount=$result->field_count; $rows_num=$mysqli->affected_rows;  $res = $mysqli->query('SHOW CREATE TABLE '.$table); $TableMLine=$res->fetch_row(); 
     $content = (!isset($content) ? '' : $content) . "\n\n".$TableMLine[1].";\n\n"; 
     for ($i = 0, $st_counter = 0; $i < $fields_amount; $i++, $st_counter=0) { 
      while($row = $result->fetch_row()) { //when started (and every after 100 command cycle): 
       if ($st_counter%100 == 0 || $st_counter == 0) {$content .= "\nINSERT INTO ".$table." VALUES";} 
        $content .= "\n("; 
        for($j=0; $j<$fields_amount; $j++) { $row[$j] = str_replace("\n","\\n", addslashes($row[$j])); if (isset($row[$j])){$content .= '"'.$row[$j].'"' ; }else {$content .= '""';}  if ($j<($fields_amount-1)){$content.= ',';}  } 
        $content .=")"; 
       //every after 100 command cycle [or at last line] ....p.s. but should be inserted 1 cycle eariler 
       if ((($st_counter+1)%100==0 && $st_counter!=0) || $st_counter+1==$rows_num) {$content .= ";";} else {$content .= ",";} $st_counter=$st_counter+1; 
      } 
     } $content .="\n\n\n"; 
    } 
    $backup_name = $backup_name ? $backup_name : $name."___(".date('H-i-s')."_".date('d-m-Y').")__rand".rand(1,11111111).".sql"; 
    header('Content-Type: application/octet-stream'); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=\"".$backup_name."\""); echo $content; exit; 
} 
?> 
+1

Cảm ơn bạn! đây là một mã tốt nhất. bởi vì các mã khác hoạt động với các hàm "exec" hoặc "system". Các chức năng này bị tắt trên các máy chủ Linux. nhưng tập lệnh này hoạt động trên máy chủ Linux. – mghhgm

+0

mã exellent làm việc cho tôi – Nothing

+0

Tuyệt vời ... Cảm ơn bạn đã chia sẻ mã này Mr.tazo ... Nó hoạt động hoàn hảo cho tôi ... Cảm ơn. –

Các vấn đề liên quan