我一直在尝试修改我的PHP数据库连接,以包含到另一台服务器的故障转移连接。我知道这个问题已被提出,但我似乎无法让它发挥作用。这是我到目前为止的代码。
我知道备份服务器和prod服务器都工作,因为我从为$ serverA配置的两台服务器中获得了所需的结果。这是故障转移组件无效。
<?php
$serverA = "mysiteA.dyndns.org:3306";
$serverB = "mysiteB.no-ip.biz:3306";
$user="myuser";
$password="mypass";
$database = "mydb";
$connection = mysql_connect($serverA,$user,$password);
if (!($connection)) {
$connection = mysql_connect($serverB,$user,$password);
};
$db = mysql_select_db($database,$connection);
$query = "SELECT listener_snapshot FROM listener_incr";
$result = mysql_query($query);
$i = -60;
while($row = mysql_fetch_assoc($result))
{
$dataset1[] = array($i,$row['listener_snapshot']);
$i++;
}
$final = json_encode($dataset1,JSON_NUMERIC_CHECK);
echo $final;
?>
PHP错误文件除了首次尝试连接失败外没有显示任何内容。编辑:第一次失败是我的测试中的设计,因为我希望它故障转移到第二台服务器。因此我在服务器A上杀了MySQL。
答案 0 :(得分:4)
以后请停止使用
mysql_*
个功能。你最好开始玩PDO。
您可以简单地创建一个包含所有可能服务器的数组,然后迭代它以期望成功。
$serverA = "mysiteA.dyndns.org:3306";
$serverB = "mysiteb.no-ip.biz:3306";
$user="myuser";
$password="mypass";
$database = "mydatabase";
$servers = array(
'A' => array(
'username' => $user,
'password' => $password,
'host' => $serverA
),
'B' => array(
'username' => $user,
'password' => $password,
'host' => $serverB
));
function mysql_f_connect(array $servers) {
foreach ($servers as $name => $array){
$connection = @mysql_connect($array['host'], $array['username'], $array['password']);
// You can also store name of the server somewhere else
if ($connection !== false) {
return $connection;
}
}
return false;
}
如果与所有服务器的连接失败,此函数将返回FALSE
。否则,它会返回一个可用于其余部分的资源,如mysql_select_db()
等
$connection = mysql_f_connect($servers);
if ($connection !== false) {
// Well, you can start doing anything else
$db = mysql_select_db($database,$connection);
} else {
// For debugging purposes:
echo mysql_error();
}