2008-09-17 24 views
24

तक पहुंच के बिना SQL तालिका को निर्यात करने का आसान तरीका मुझे दूरस्थ रूप से निर्यात करने और फिर एक दूरस्थ सर्वर से MySQL तालिका में डेटा को मेरे होम सर्वर पर आयात करने का एक तरीका चाहिए। मेरे पास सर्वर तक सीधी पहुंच नहीं है, और phpMyAdmin जैसे कोई उपयोगिताओं को स्थापित नहीं किया गया है। हालांकि, मेरे पास सर्वर पर PHP स्क्रिप्ट डालने की क्षमता है।सर्वर या phpMyADMIN

मैं डेटा पर कैसे प्राप्त करूं?

मैं इसे सीएसवी को निर्यात, और फिर साथ जो कुछ भी उपयोगिता उपलब्ध है आयात करके

+0

[निर्यात MySQL PHP का उपयोग डेटाबेस केवल] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/22195493/export-mysql-database-using-php-only) –

उत्तर

38

आप इस के लिए एसक्यूएल इस्तेमाल कर सकते हैं:

$file = 'backups/mytable.sql'; 
$result = mysql_query("SELECT * INTO OUTFILE '$file' FROM `##table##`"); 

तो बस एक ब्राउज़र या कम से एफ़टीपी ग्राहक बात निर्देशिका/फ़ाइल (बैकअप/mytable.sql)। उदाहरण के लिए फ़ाइल नाम को टाइमस्टैम्प दिया गया है, यह वृद्धिशील बैकअप करने का भी एक अच्छा तरीका है।

उसे वापस कि फ़ाइल से अपने डेटाबेस के लिए प्राप्त करने के लिए आप का उपयोग कर सकते हैं:

:

$file = 'backups/mytable.sql'; 
$result = mysql_query("LOAD DATA INFILE '$file' INTO TABLE `##table##`"); 

अन्य विकल्प सर्वर और रन 'mysqldump' पर एक प्रणाली आदेश को लागू करने की पीएचपी उपयोग करने के लिए है

$file = 'backups/mytable.sql'; 
system("mysqldump --opt -h ##databaseserver## -u ##username## -p ##password## ##database | gzip > ".$file); 
+3

आप जिस भी स्क्रिप्ट में SELET * INTO आउटपुट चलाते हैं, आप फ़ाइल को तुरंत डाउनलोड करने के लिए केवल एक शीर्षलेख ('स्थान:'। $ फ़ाइल) कर सकते हैं। – Jrgns

+1

कृपया ध्यान रखें कि इस विधि का उपयोग करने के लिए आप स्पष्ट रूप से 'अनुदान फ़ाइल' * * से 'youruser' @ 'localhost'; '। यह भी ध्यान रखें कि फ़ाइल MySQL उपयोगकर्ता के साथ लिखी जा रही है और यह कि आपकी स्थापना में MySQL AppArmor प्रतिबंधों के अधीन हो सकता है। – DustWolf

+0

क्या एचटीएमएल में इसे थूकने का कोई तरीका है? मुझे सर्वर CHMOD परिवर्तन की अनुमति नहीं है और लेखन अनुमतियां नहीं हैं I क्या मैं इसे जेएसओएन में थूक सकता हूं इसे पृष्ठ में भी लोड कर सकता हूं? क्या यह तालिका विशेषताओं का भी उत्पादन करता है? प्रकार और लंबाई और आकार आदि की तरह धन्यवाद। – Kreeverp

16

मैंने किया क्या करना मेरे रास्ते रिकॉर्ड करने के लिए विशुद्ध रूप से यह सवाल पूछते। मुझे php: // output stream के उपयोग की तरह काफी पसंद है।

$result = $db_con->query('SELECT * FROM `some_table`'); 
$fp = fopen('php://output', 'w'); 
if ($fp && $result) { 
    header('Content-Type: text/csv'); 
    header('Content-Disposition: attachment; filename="export.csv"'); 
    while ($row = $result->fetch_array(MYSQLI_NUM)) { 
     fputcsv($fp, array_values($row)); 
    } 
    die; 
} 
3

यदि आपके पास एफ़टीपी/एसएफटीपी एक्सेस है तो आप आगे बढ़ सकते हैं और phpMyAdmin स्वयं अपलोड कर सकते हैं। साइट में जर्मन है लेकिन डाउनलोड कुछ अंग्रेज़ी प्रलेखन भी है
http://www.taw24.de/download/pafiledb.php?PHPSESSID=b48001ea004aacd86f5643a72feb2829&action=viewfile&fid=43&id=1
:

मैं इस छोटे पैकेज का उपयोग कर रहा एक सर्वर से स्वचालित mysql बैकअप करने के लिए मैं केवल के लिए FTP पहुंच है।

एक त्वरित गूगल भी इस अप हो गया, पर मैं इसे अपने आप उपयोग नहीं किया है:
http://snipplr.com/view/173/mysql-dump/

+0

तो phpMyAdmin अपलोड करने: यहाँ कोड है एक विकल्प था, मैं इसे कर सकता था। – Jrgns

+0

स्निपेट से प्यार है, यद्यपि! – Jrgns

-1

मैं कमांड लाइन के माध्यम से mysqldump का उपयोग करें:

exec("mysqldump sourceDatabase -uUsername -p'password' > outputFilename.sql"); 

तो फिर तुम सिर्फ परिणामी फ़ाइल और यो डाउनलोड तुमने किया

+0

कमांड हमेशा साझा होस्टिंग पर काम नहीं करता है और/या उपयोग करने के लिए थोड़ा समस्याग्रस्त हो सकता है (0 बाइट फ़ाइल)। एक पूर्ण-पीएचपी समाधान हमेशा काम करना चाहिए। – LuBre

3

आप को देखकर सोच सकते हैं: http://www.webyog.com यह एक शानदार जीयूआई व्यवस्थापक उपकरण है, और वे एक बहुत साफ HTTP-टनेलिंग सुविधा (मुझे यकीन है कि अगर यह केवल उद्यम जो कुछ रुपये की लागत में है नहीं कर रहा हूँ) है।

मूल रूप से आप अपनी वेबस्पेस (php स्क्रिप्ट) में प्रदान की गई एक स्क्रिप्ट अपलोड करते हैं और इसके लिए sqlyog प्रबंधक को इंगित करते हैं और आप डेटाबेस तक पहुंच सकते हैं। यह इस स्क्रिप्ट का उपयोग आपके घर क्लाइंट और सर्वर के बीच अनुरोध/प्रश्नों को सुरंग/प्रॉक्सी करने के लिए करता है।

मुझे कम से कम 1 व्यक्ति पता है जो इस विधि का उपयोग महान परिणामों के साथ करता है।

9

आपको phpMinAdmin पर भी विचार करना चाहिए जो केवल एक फ़ाइल है, इसलिए अपलोड करना और सेटअप करना आसान है।

6

श्रमजीवी समाधान (नवीनतम संस्करण में: Export.php + Import.php)

EXPORT_TABLES("localhost","user","pass","db_name"); 

कोड:

//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; 
} 
2

यहाँ एक PHP स्क्रिप्ट मैं जो होगा बैकअप अपने डेटाबेस में सभी तालिकाओं बनाया है। यह कुछ सुधारों के साथ इस http://davidwalsh.name/backup-mysql-database-php पर आधारित है। सबसे पहले यह foreign key restrictions सही ढंग से स्थापित करेगा।

मेरे सेट अप में स्क्रिप्ट सप्ताह के एक निश्चित दिन पर चलेगी, चलो सोमवार को कहें। यदि यह सोमवार को नहीं चलता है, तो यह अभी भी मंगलवार को (उदाहरण के लिए) चलाएगा, .sql फ़ाइल को पिछले सोमवार की तारीख के साथ, जब इसे चलाने के लिए चलाया गया था। यह 4 सप्ताह पहले .sql फ़ाइल मिटा देगा, इसलिए यह हमेशा पिछले 4 बैकअप रखता है।

<?php 

backup_tables(); 

// backup all tables in db 
function backup_tables() 
{ 
    $day_of_backup = 'Monday'; //possible values: `Monday` `Tuesday` `Wednesday` `Thursday` `Friday` `Saturday` `Sunday` 
    $backup_path = 'databases/'; //make sure it ends with "/" 
    $db_host = 'localhost'; 
    $db_user = 'root'; 
    $db_pass = ''; 
    $db_name = 'movies_database_1'; 

    //set the correct date for filename 
    if (date('l') == $day_of_backup) { 
     $date = date("Y-m-d"); 
    } else { 
     //set $date to the date when last backup had to occur 
     $datetime1 = date_create($day_of_backup); 
     $date = date("Y-m-d", strtotime($day_of_backup.' -7 days')); 
    } 

    if (!file_exists($backup_path.$date.'-backup'.'.sql')) { 

     //connect to db 
     $link = mysqli_connect($db_host,$db_user,$db_pass); 
     mysqli_set_charset($link,'utf8'); 
     mysqli_select_db($link,$db_name); 

     //get all of the tables 
     $tables = array(); 
     $result = mysqli_query($link, 'SHOW TABLES'); 
     while($row = mysqli_fetch_row($result)) 
     { 
      $tables[] = $row[0]; 
     } 

     //disable foreign keys (to avoid errors) 
     $return = 'SET FOREIGN_KEY_CHECKS=0;' . "\r\n"; 
     $return.= 'SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";' . "\r\n"; 
     $return.= 'SET AUTOCOMMIT=0;' . "\r\n"; 
     $return.= 'START TRANSACTION;' . "\r\n"; 

     //cycle through 
     foreach($tables as $table) 
     { 
      $result = mysqli_query($link, 'SELECT * FROM '.$table); 
      $num_fields = mysqli_num_fields($result); 
      $num_rows = mysqli_num_rows($result); 
      $i_row = 0; 

      //$return.= 'DROP TABLE '.$table.';'; 
      $row2 = mysqli_fetch_row(mysqli_query($link,'SHOW CREATE TABLE '.$table)); 
      $return.= "\n\n".$row2[1].";\n\n"; 

      if ($num_rows !== 0) { 
       $row3 = mysqli_fetch_fields($result); 
       $return.= 'INSERT INTO '.$table.'('; 
       foreach ($row3 as $th) 
       { 
        $return.= '`'.$th->name.'`, '; 
       } 
       $return = substr($return, 0, -2); 
       $return.= ') VALUES'; 

       for ($i = 0; $i < $num_fields; $i++) 
       { 
        while($row = mysqli_fetch_row($result)) 
        { 
         $return.="\n("; 
         for($j=0; $j<$num_fields; $j++) 
         { 
          $row[$j] = addslashes($row[$j]); 
          $row[$j] = preg_replace("#\n#","\\n",$row[$j]); 
          if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; } 
          if ($j<($num_fields-1)) { $return.= ','; } 
         } 
         if (++$i_row == $num_rows) { 
          $return.= ");"; // last row 
         } else { 
          $return.= "),"; // not last row 
         } 
        } 
       } 
      } 
      $return.="\n\n\n"; 
     } 

     // enable foreign keys 
     $return .= 'SET FOREIGN_KEY_CHECKS=1;' . "\r\n"; 
     $return.= 'COMMIT;'; 

     //set file path 
     if (!is_dir($backup_path)) { 
      mkdir($backup_path, 0755, true); 
     } 

     //delete old file 
     $old_date = date("Y-m-d", strtotime('-4 weeks', strtotime($date))); 
     $old_file = $backup_path.$old_date.'-backup'.'.sql'; 
     if (file_exists($old_file)) unlink($old_file); 

     //save file 
     $handle = fopen($backup_path.$date.'-backup'.'.sql','w+'); 
     fwrite($handle,$return); 
     fclose($handle); 
    } 
} 

?>