sakazuki.info

たまに近況が更新されたりします

【負荷対策】mysqlに接続失敗したら予備のDBサーバにアクセスするプログラム

calendar

reload

負荷分散というよりは、mysqlにつながらなかった場合の対策方法。

まだ改良中なんですが一旦メモとして公開しておきます。

[php]
$filename = “mysql.ini”;
//データベースのユーザー名とパスワードはmysql.iniに書いておきます。

if (!file_exists($filename)){
die(“mysql.iniファイルが存在しません。”);
}Else{
$fp = fopen($filename,”r”);
if (!$fp){
die(“mysql.iniファイルが存在しません。”);
}Else{
$HostName=trim(fgets($fp));
$UserName=trim(fgets($fp));
$Password=trim(fgets($fp));
$Database=trim(fgets($fp));
}
fclose($fp);
}

$con = @mysql_connect(localhost,$UserName,$Password);
//@をつけて、接続失敗した場合に警告文を出さないようにする。

if (!$con){
$con = mysql_connect(“【予備サーバのIP】”,$UserName,$Password);
//接続失敗した場合、$conの中身は空なので、その場合にこちらが実行される。
//予備サーバのユーザー名とパスワードは本体と統一しておいて、mysql.iniから呼び出したものをそのまま使っています。

$daitai =”アクセスが集中しているため、予備のデータベースにアクセスしています。”;
//予備サーバにアクセスしている事がわかるように、$daitai(変数名は適当。なんでもいいです)を使う。
//この変数の中身をechoで出力してあげるとかすると、パッと見わかりやすいかも。
}
if (!mysql_select_db($Database,$con)){
header(‘Location: http://【ドメイン名】/error.php’);
//予備にもつながらなかった場合はエラーページに飛ばします。
exit;
}
[/php]

主にコアサーバー用です。

上記を1つのファイルにして、

同時接続数が上限まで行っちゃったら接続できなくなるので、
そういった場合に予備のDBを使うという方式。

でもたぶん同時接続数が上限まで逝く前に予備を使う方が
いいので、どうやったら実現するかを考え中。

なお、改良版として、Yahoo.com(海外版)やBingのクローラーが
アクセスしに来ている場合に
同時接続数に達していなくても予備DBに接続させるバージョンも作成しています。