[英]Codeigniter switch to secondary database if primary is down
我想知道是否有一種方法可以處理mysql錯誤並配置ci以在主服務器關閉(無法連接)的情況下切換到輔助DB服務器?
好吧,我不知道這是否行得通,但是您可以嘗試以下操作:
1)創建2組數據庫設置(在application / config / 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)您可以在加載庫時將TRUE傳遞給第二個參數,以便它實際上具有返回值; 它返回數據庫對象本身:
$dbobject1 = $this->load->database('default',TRUE);
$dbobject2 = $this->load->database('second',TRUE);
現在,您可以僅檢查“連接ID”資源,以查看是否已建立連接:
if(FALSE === $dbobject1->conn_id)
{
echo 'No connection established!';
}
現在,您可以決定加載另一個數據庫,以防第一個數據庫不加載。 缺點是,您實際上並不知道為什么數據庫連接不起作用,但是...
至於如何實現這一點,您可能想嘗試擴展數據庫類,或者更好地,創建您自己的庫,該庫實際上只是檢查是否存在連接,然后加載該庫而不是數據庫庫。 由於它返回一個數據庫對象(除了所有兩個連接都失敗時),因此您可以像在普通數據庫類上那樣進行處理:
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;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.