2012-04-04 33 views
14

Kullanıcıya verilerini yedekleyebilmem için php komut dosyasını kullanarak php komutunu kullanarak değil, yapısı ve verileri ile bir mysql veritabanı oluşturmak ve vermek için mysql veritabanı oluşturmam istendi?mysql veritabanını php komut dosyasını kullanarak verilerini nasıl dışa aktarabilirim?

Bunun nasıl yapılacağı hakkında bir fikri olan var mı? peşin İşte

+0

sadece PHP olmak zorunda mı? Her zaman mysqldump kullanabilir ve bir PHP betiği olması gerekiyorsa, exec ile mysqldump kullanabilir. – Corbin

+1

[Bir SQL tablosunu sunucuya veya phpMyADMIN'e erişim olmadan dışa aktarmanın kolay yolu] (http://stackoverflow.com/q/81934/), [php kodu ile mysql veritabanı dışa aktarma] (http://stackoverflow.com/q/2491728/90527), [En iyi yöntem: PHP'de mySQL dosyasını içe aktar; bölünmüş sorgular] (http://stackoverflow.com/q/1883079/90527) ve büyük olasılıkla [diğerleri] (http://stackoverflow.com/search?q=PHP+MySQL+%2Bexport+%2Bimport). – outis

cevap

10

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

ya

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

veya

$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

herhangi bir kişi php komutunu php komut dosyası üzerinden nasıl çektiğini bilir –

+0

Eğiticiye bakın. Bir "LOAD DATA INFILE" backupFile 'INTO TABLE $ tableName IN;' bölümü vardır. – binarious

14

GÜVENLİ ve ÇALIŞMA ÇÖZÜM (en son sürümü: Export.php + Import.php)

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

KODU:

<?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

Teşekkür ederiz! Bu en iyi koddur. Diğer kodlar "exec" veya "system" işlevleri ile çalıştığı için. Linux ana bilgisayarlarında bu işlevler devre dışı bırakılmıştır. ama bu betik Linux sunucularında çalıştı. – mghhgm

+0

exellent kodu benim için çalıştı – Nothing

+0

Awesome ... Bu kodu paylaştığınız için teşekkürler Mr.tazo ... Bu benim için mükemmel çalışıyor ... Teşekkürler. –

İlgili konular