【发布时间】:2011-10-17 03:18:00
【问题描述】:
我想知道是否有办法处理 mysql 错误并配置 ci 以在主服务器关闭(无法连接)的情况下切换到辅助数据库服务器?
【问题讨论】:
-
我已经这样做了,但是需要很长时间!
stackoverflow.com/questions/23743374/…
标签: php mysql codeigniter
我想知道是否有办法处理 mysql 错误并配置 ci 以在主服务器关闭(无法连接)的情况下切换到辅助数据库服务器?
【问题讨论】:
标签: php mysql codeigniter
好吧,我不知道这是否会起作用,但你实际上可以试试这个:
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!';
}
现在您可以决定加载另一个数据库,以防第一个数据库无法加载。不利的一面是,您实际上不知道为什么 db 连接不起作用...
至于如何实现这一点,您可能想尝试扩展数据库类,或者更好的是,创建您自己的库,该库实际上只是检查连接是否存在,然后加载它而不是数据库库。因为它返回一个数据库对象(除了所有 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;
}
}
}
【讨论】: