2013-10-23 71 views
2

根據codeigniter文檔,我可以使用dbutil類輕鬆備份我的codeigniter應用程序數據庫。現在我想備份另一個未由codeigniter應用程序使用的數據庫,但它具有相同的服務器。 我在谷歌搜索以及stackoverflow,但沒有得到任何答案。如何使用codeigniter「dbutil」類來備份另一個數據庫?

是否有任何替代ci類來備份任何數據庫或我可以使用build在dbutil類?

在此先感謝

回答

2

我以前沒有使用過的dbutil類,但不能你只需要添加新的數據庫在你的配置/數據庫文件並加載它?即。

$db['new_db_name']['hostname'] = "localhost"; // localhost if same server 
$db['new_db_name']['username'] = "un"; // your db username 
$db['new_db_name']['password'] = 'pass'; // your db password 
$db['new_db_name']['database'] = "new_db_name"; // your db name 
$db['new_db_name']['dbdriver'] = "mysql"; 
$db['new_db_name']['dbprefix'] = ""; 
$db['new_db_name']['pconnect'] = TRUE; 
$db['new_db_name']['db_debug'] = TRUE; 
$db['new_db_name']['cache_on'] = FALSE; 
$db['new_db_name']['cachedir'] = ""; 
$db['new_db_name']['char_set'] = "utf8"; 
$db['new_db_name']['dbcollat'] = "utf8_general_ci"; 

然後$ this-> load-> database('new_db_name');

//無論dbutil功能...

編輯: 我只是測試這一點,似乎dbutil類使用$這個 - > db對象。所以,如果你的$this->load->database('new_db_name', TRUE)結果設置爲$this->db(第二「TRUE」參數返回db對象),那麼它的工作原理,即:

$this->db = $this->load->database('new_db_name', TRUE); 
$this->load->dbutil(); 
// do whatever 
+0

但遺憾的是它不工作,這是仍然備份默認數據庫而不是新數據庫。 – Jewel

+0

請參閱我上面的修改。 – Inigo

+0

感謝它的工作:) – Jewel

0

試試這個代碼

<?php 

class Backup extends CI_Controller 
{ 
    public function __construct() 
{ 
     parent::__construct(); 

      $this->load->database(); // Loads the database setting 

    } 

    public function backup_db() 
    { 
      /* Store All Table name in an Array */ 


    $return=""; 
    $allTables = array(); 
      $result = mysql_query('SHOW TABLES'); 
      while($row = mysql_fetch_row($result)) 
      { 
                $allTables[] = $row[0]; 
          } 

      foreach($allTables 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"; 

       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"; 
          } 
        } 
$return.="\n\n"; 
}// Create Backup Folder 

     $folder = 'Database_Backup/'; 

     if (!is_dir($folder)) 

      mkdir($folder, 0755, true); 
      chmod($folder, 0755); 

      $date = date('m-d-Y-H-i-s', time()); 
      $filename = $folder."Medi_Hospi-".$date; 

      $handle = fopen($filename.'.sql','w+'); 

     fwrite($handle,$return); 
      fclose($handle); 

     echo "Backup of Database Taken"; 

} 
} ?> 
+0

當我使用框架時,我總是嘗試使用提供的功能來解決問題。 – Jewel