2011-10-17 24 views
1

我不知道是否有一種方法來處理MySQL錯誤和配置CI切換到輔助數據庫服務器中時在主服務器停機(無法連接)?笨切換到輔助數據庫,如果主服務器停機

+0

我已經這樣做了,但需要很長時間!
http://stackoverflow.com/questions/23743374/codeigniter-check-the-connection-to-multi-databases-take-long-time – jodi

回答

6

好了,我不知道這是去工作,但實際上你可以試試這個:

1)創建2組數據庫設置(在應用程序/配置/ database.php中):

// regular one.. 
$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = 'root'; 
//... 

// second connection 
$db['second']['hostname'] = 'localhost'; 
$db['second']['username'] = 'root'; 
//... 

2)設置deubg關閉以避免顯示DB錯誤和實際殺害你的腳本(這樣做對雙方):

$db['default']['db_debug'] = FALSE; 

3)你可以傳遞一個真正的第二paramenter同時加載庫,所以它實際上有一個返回值;它返回的數據庫對象本身:

$dbobject1 = $this->load->database('default',TRUE); 
$dbobject2 = $this->load->database('second',TRUE); 

現在,你可以檢查的「連接ID」的資源,看是否有已建立連接或沒有:

if(FALSE === $dbobject1->conn_id) 
{ 
    echo 'No connection established!'; 
} 

現在你可以決定要加載另一個數據庫在第一個沒有加載的情況下。缺點是,你真的不知道爲什麼數據庫連接沒有工作,雖然...

至於如何實現這一點,你可能想嘗試擴展數據庫類,或者更好,創造你自己庫實際上只是檢查連接是否存在,並加載它而不是數據庫庫。由於它返回一個數據庫對象(除了當所有2個連接都失敗時),您可以像處理普通數據庫類那樣工作:

class Check_db { 

    private $CI = ''; 
    public $DB1 = ''; 
    public $DB2 = ''; 

    function __construct() 
    { 
     $this->CI =&get_instance(); 
     $this->DB1 = $this->CI->load->database('default',TRUE); 
     if(FALSE !== $this->DB1->conn_id) 
     { 
      return $this->DB1; 
     } 
     else 
     { 
      $this->DB2 = $this->CI->load->database('second',TRUE); 
      if(FALSE !== $this->DB2->conn_id) 
      { 
      return $this->DB2; 
      } 
      else 
      { 
      return FALSE; 
      } 
     } 
     } 
+0

這是太棒了,什麼我要找的。我必須嘗試一下...... CHEERS隊友! – flyclassic

相關問題