Linux で mysql の同期ステータスを検出する
php メソッド、linuxmysql
この記事の例では、PHP が Linux 上で MySQL の同期ステータスを検出する方法について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
mysqlの同期状態検出の実装方法を2つの例で紹介します。コードは次のとおりです:
コードをコピーします コードは次のとおりです:
#!/bin/sh
#MySQL_Slave ステータスを確認する
#crontab 時間 00:10
MYSQL_USER="ルート"
MYSQL_PWD="123456"
MYSQL_SLAVE_LOG="/tmp/check_mysql_slave.log"
メール = "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
"スレーブのステータスを表示G" | grep -i "実行中")
IO_ENV=`echo $MYSQL_SLAVE_STATUS | grep IO ' {print $2}'
SQL_ENV=`echo $MYSQL_SLAVE_STATUS | grep SQL '{print $2}'
NOW=$(日付 -d 今日 +'%Y-%m-%d %H:%M:%S')
if [ "$MYSQL_PORT" = "3306" ];then
エコー「mysql が実行中です!」
それ以外は
mail -s "警告!サーバー: $MYSQL_IP mysql がダウンしています" "$EMAIL"
はい
if [ "$IO_ENV" = "はい" -a "$SQL_ENV" = "はい" ];then
エコー「奴隷が走っています!」
それ以外は
echo "[ $NOW ] スレーブが実行されていません! >> "$MYSQL_SLAVE_LOG"
cat "$MYSQL_SLAVE_LOG" | mail -s "警告! ${MySQL_IP}_replicate_error" "$EMAIL"
はい
0番出口
PHP サンプルコード、コードは次のとおりです:
check_rep.php:
コードをコピーします
コードは次のとおりです:if(emptyempty($_REQUEST["key"])) die(':) キーがありません');
if($_REQUEST["key"] != 'xupeng') die(':) エラーキー');
include("mysql_instance.php");
include("check_status_api.php");
定義("ユーザー名", "ユーザー名");
定義("パスワード", "パスワード");
定義("デバッグモード", false);
$instances = get_instances();
if($インスタンス){
エコー<<
終わります
エコー「
」
ん」;
if(!DEBUGMODE){
エコー「
」
ん」;
}その他{
エコー「
」
ん」;
}
foreach($instances as $host){
$res = check_mysql_replication_status($host, ユーザー名, パスワード);
if(!DEBUGMODE){
switch($res["結果"]){
ケース-4:
$memo = "不明な例外"
休憩
ケース-3:
$memo = "クエリが失敗しました"
休憩
ケース-2:
$memo = "ポートに接続できません";
休憩
ケース-1:
$memo = "ステータス不明"
休憩
ケース 0:
$memo = "OK";
休憩
ケース 1:
$memo = "同期に失敗しました"
If($res["Slave_IO_Running"] <> "はい"){
$memo .= $res["Last_IO_Error"] "(" . $res
["Last_IO_Errno"]
;
}
If($res["Slave_SQL_Running"] <> "はい"){
$memo .= $res["Last_SQL_Error"] "(" . $res
["Last_SQL_Errno"] .")";
}
休憩
ケース 2:
$memo = "データベースが同期されていません";
休憩
}
エコー「
」
ん」;
}その他{
エコー「
」
ん」;
}
}
エコー「
」
<テーブルの境界線="">
インスタンス |
結果 |
スレーブ_IO_実行中 |
スレーブ_SQL_実行中 |
マスターホスト |
マスターポート |
Replicate_Do_DB |
メモ |
インスタンス |
結果 |
スレーブ_IO_実行中 |
スレーブ_SQL_実行中 |
マスターホスト |
マスターポート |
Replicate_Do_DB |
スレーブ_IO_状態 |
Last_IO_Errno |
Last_IO_Error |
Last_SQL_Errno |
Last_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['Master_Port']} |
{$res['Replicate_Do_DB']} |
{$res['Slave_IO_State']} | {$res['Last_IO_Errno']} |
{$res['Last_IO_Error']} |
{$res['Last_SQL_Errno']} |
{$res['Last_SQL_Error']} |
テーブル>
ん」;
エコー<<
終わります
}その他{
die("mysql インスタンスが定義されていません。");
}
check_status_api.php:
コードをコピーします
コードは次のとおりです:
/*
* mysqlサーバーの同期ステータスを確認してください
*/
関数 check_mysql_replication_status($host, $username, $password)
{
//デフォルトのステータスは不明です
$r = 配列(
「結果」 => -1
);
試してください{
$dbh = @mysql_connect($host, $username, $password);
if(!$dbh){
//接続できません
$r["結果"] = -2;
リターン($r);
}
$query = "スレーブのステータスを表示";
$res = @mysql_query($query, $dbh);
$err = @mysql_error();
if($err){
//接続できません
$r["結果"] = -3;
リターン($r);
}
$row = mysql_fetch_array($res);
$r = $行
if(($r["Slave_IO_Running"] == "はい") && ($r["Slave_SQL_Running"] == "はい"))
{
$r["結果"] = 0;
}その他{
if(!emptyempty($row)){
$r["結果"] = 1;
}その他{
$r["結果"] = 2;
}
}
}catch(例外 $e){
$r["結果"] = -4;
}
リターン($r);
}
mysql_instance.php:
コードをコピーします
コードは次のとおりです:
//GRANT REPLICATION CLIENT ON *.* TO 'username'@'monitoring host ip' IDENTIFIED BY 'password';
配列();
$mysql_instances[] = "リモート IP:ポート";
関数 get_instances()
{
グローバル $mysql_instances;
$mysql_instances を返す
}
上記 3 つの PHP ファイルを仮想ディレクトリに配置し、URL 経由でアクセスします。
アクセス方法:http://ip/check_repl.php?key=xupeng
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。
http://www.bkjia.com/PHPjc/943417.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/943417.html
技術記事
PHP を使用して Linux で MySQL の同期状態を検出する方法、linuxmysql この記事では、PHP を使用して Linux で MySQL の同期状態を検出する方法について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:...