ホームページ  >  記事  >  バックエンド開発  >  mysqlの同期状態の検出実装コード(php/linux)_PHPチュートリアル

mysqlの同期状態の検出実装コード(php/linux)_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:11:15779ブラウズ

この記事では、MySQL 同期状態検出実装プログラムを紹介する 2 つの例を紹介します。必要な方は参考にしてください。

コードは次のとおりです コードをコピーします

#!/bin/sh

#check MySQL_Slave Status
#crontab time 00:10
MYSQL_USER="root"
MYSQL_PWD="1234 56 "
MYSQL_SLAVE_LOG ="/ tmp/check_mysql_slave.log"
EMAIL="1351010****@139.com"

MYSQL_PORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "] + '{ print $5}'`
MYSQL_IP=`ifconfig eth0|grep "inet addr" awk -F[:" "]+ '{print $4}'`
MYSQL_SLAVE_STATUS=$(/usr/local/webserver/mysql /bin/ mysql -u root -psylc23hua -S /tmp/mysql.sock -e

"スレーブステータスを表示")
IO_ENV=`echo $MYSQL_SLAVE_STATUS | grep IO | }'`
SQL_ENV=`echo $MYSQL_SLAVE_STATUS | grep SQL | awk '{print $2}'`
NOW=$(date -d today +'%Y-%m-%d %H:%M:%S' )

if [ "$MYSQL_PORT" = "3306" ];then
echo "mysql が実行中です!"
else
mail -s "warn!server: $MYSQL_IP mysql がダウンしています" "$EMAIL"
fi

if [ "$ IO_ENV" = "はい" -a "$SQL_ENV" = "はい" ];then
echo "スレーブが実行中です!"
else
echo "[ $NOW ] スレーブが実行されていません!" $MYSQL_SLAVE_LOG"
cat "$MYSQL_SLAVE_LOG" | mail -s "警告! ${MySQL_IP}_replicate_error" "$EMAIL"
fi

exit 0

phpサンプルコード

コードは次のとおりです コードをコピー

check_rep.php

if(empty($_REQUEST["key "]) ) die(':) キーがありません');
if($_REQUEST["key"] != 'xupeng') die(':) エラーキー');

include("mysql_instance.php") ;
include ("check_status_api.php");

define("USERNAME", "ユーザー名");
define("PASSWORD", "パスワード");
define("DEBUGMODE", false);

$instances = get_instances ();

if($instances){
echo <<

END;
echo "
n";
if(! DEBUGMODE){
echo "

n";
}else{
echo "

n";
}
foreach($instances as $host){
$res = check_mysql_replication_status($host, USERNAME, PASSWORD);
if(! DEBUGMODE){
switch($res["result"]){
case -4:
$memo = "不明な例外";
Break;
case -3:
$memo = "クエリが失敗しました";
Break;
case -2:
$memo = "ポートに接続できません";
case -1: case 1:
$memo = "同期に失敗しました";
if($res["Slave_IO_Running"] <> "はい"){
$memo .= $res["Last_IO_Error"] . "(" . $res

["Last_IO_Errno"] . ")";
}
if($res["Slave_SQL_Running"] < &gt; "yes"){$ memo。= "last_sql_error" "(" last_sql_errno "]

n";
}
}
echo "























< ;tr>






















インスタンス結果Slave_IO_RunningSlave_SQL_RunningMaster_HostMaster_Port Replicate_Do_DBメモ
インスタンス結果Slave_IO_実行中
Slave_SQL_RunningMaster_HostMaster_PortReplicate_Do_DB スレーブ_IO_状態
Last_IO_ErrnoLast_IO_ErrorLast_SQL_ErrnoLast_SQL_Error
{$host}{$res['result']}{$res['Slave_IO_Running']} {$res['Slave_SQL_Running']}{$res['Master_Host']}{$ res['Master_Port']}{$res['Replicate_Do_DB']}{$memo}
{$host}{$res['result']}{$res['Slave_IO_Running ']}{$res['Slave_SQL_Running']}{$res['Master_Host']}{$res['Replicate_Do_DB']}{$res['Slave_IO_State']}< /td>
{$res['Last_IO_Errno']}{$res['Last_IO_Error']}{$res[ 'Last_SQL_Errno']}{$res['Last_SQL_Error']}

n" ;
echo <<

END;
}else{
die("mysql インスタンスが定義されていません。");
}
check_status_api.php

/ *
* 检查mysql サービス务器の同状態态
*/
function check_mysql_replication_status($host, $username, $password)
{
//默认状態态不明
$r = array(
"result" => -1
);
try{
$dbh = @mysql_connect($host, $username, $password);
if(!$dbh){
//無法连接
$r["result"] = -2;
return($r);
}
$query = "スレーブステータスの表示";
$res = @mysql_query($query, $dbh);
$err = @mysql_error();
if($err){
//無法连接
$r["result"] = -3;
return($r);
}
$row = mysql_fetch_array($res);
$r = $row;
if(($r[" Slave_IO_Running"] == "はい") && ($r["Slave_SQL_Running"] == "はい"))
{
$r["result"] = 0;
}else{
if(!empty($row )){
$r["result"] = 1;
}else{
$r["result"] = 2;
}
}
}catch(Exception $e){
$r["result"] = -4;
}
return($r);
}
mysql_instance.php

上記3つのPHPファイルを仮想ディレクトリに配置し、URL経由でアクセスします。
アクセス方法: http://ip/check_repl.php?key=xupeng


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/444665.html技術記事この記事では、MySQL 同期状態検出実装プログラムを紹介する 2 つの例を紹介します。必要な方は参考にしてください。 コードは次のとおりです コードをコピー #!/bin/sh #check MySQL_Slave Status #crontab ti...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。