2011-07-19 11 views
1

私はPHPで書かれたWebアプリケーション用のマスター - スレーブ設定を持っています。私は読書のために使う奴隷のプールを持っていて、書いて使われているマスターは書いてあります。私は、削除されたクラッシュしたサーバーの自動化されたシステムを読み取りプールから取り込みたいと考えています。現在、私は以下を使用しています:MySQLサーバが起動しているかどうかを確認する最善の方法

foreach($readers as $reader) 
    { 

     $fp = @fsockopen($reader['host'],3306,$errno,$errstr,1); 
     if(!$fp) 
     { 
      //Remove from pool 
     } 
     unset($fp); 
    } 

私の主な質問は、より信頼性の高い方法です。私は実際にMySQLサーバをチェックするのではなく、ポート3306の接続だけをチェックしているので、誤認がかなりあります。例外を発生させずにMySQLサーバをチェックする方法はありますか。 PHPのPDOとMySQLi拡張の動作

答えて

7

mysql_connect()を使用して、結果をfalseとして確認し、すぐに接続を閉じることができます。もしあなたが好きなら、権限のないダミーのアカウントを作ることができます。あなたがポートでリッスンし、他のランダムなプロセスから実行しているMySQLサーバを区別したい場合は特に、本当に信頼できる唯一の方法だ

+0

PHPが例外をスローして500 Server Errorでスクリプトを終了していたという問題が発生しました。 – mrkmg

+0

心配しないで、私は@ symnbolがそこで働いていることに気づきませんでした。 – mrkmg

+0

これは例外ではなく、単にエラーメッセージです。はい、 '@'やその他の一般的なエラー報告設定で制御することができます。 –

0
現在のDB接続、あなたが持っているかどうかを確認するmysql_ping()を使用することができ

オープンはまだここに

生きているすべてのサービスが生きているかどうかを確認するためにhttp://www.php.net/manual/en/function.mysql-ping.php

<?php 
set_time_limit(0); 

$conn = mysql_connect('localhost', 'mysqluser', 'mypass'); 
$db = mysql_select_db('mydb'); 

/* Assuming this query will take a long time */ 
$result = mysql_query($sql); 
if (!$result) { 
    echo 'Query #1 failed, exiting.'; 
    exit; 
} 

/* Make sure the connection is still alive, if not, try to reconnect */ 
if (!mysql_ping($conn)) { 
    echo 'Lost connection, exiting after query #1'; 
    exit; 
} 
mysql_free_result($result); 

/* So the connection is still alive, let's run another query */ 
$result2 = mysql_query($sql2); 
?> 
0

に掲載の最善の方法は、実際にそれを使用する場合の例です。したがって、MySQLはいくつかのファイルを取得しようとするといくつかのファイルを取得しようとするいくつかのファイルを取得しようとするいくつかの高速クエリを接続して実行しようとします...

MySQLのマスター/スレーブの設定では、複製の状態を確認してください。マスターの後ろにあるスレーブの数を確認し、古いデータがあるときにそのスレーブの使用を中止することができます。 (私自身は複製をしませんが、変数Read_Master_Log_PosRelay_Log_Posを比較する必要があると思います)

関連する問題