2011-12-15 30 views
4

私はマスター/スレーブのMySQLのレプリケーションを持っています。MySql - レプリケーション監視ツール

私はレプリケーションを監視することができますツールを探してイム(など、遅れを確認、それは誤りがない参照)

私はすべてのチームメンバーが、上の可視性を得ることができます視覚的なツールを好みますステータスであり、スクリプトツールではありません。

MySQLを照会してから結果を取得するために、任意のプログラミング言語を使用することができます

+0

ダウンロードするツールをお探しですか?誰かが作ることができるツールですか? –

+0

私はSAASを好むか、 – Ran

+0

の[MySQL Monitor Replication]の複製をダウンロードしてください。(http://stackoverflow.com/questions/1075433/mysql-monitor-replication) – jweyrich

答えて

2

:あなたは、これは悪いアイデアだと思う場合は、phpmyadminをインストール

show slave status; <-- execute on slave 
show master status; <-- execute on master 

、レプリケーション監視のために、すでに組み込みのGUIがあります、のように:http://demo.phpmyadmin.net/master-config/(複製)

+0

私はもっと使いやすいツールを探していましたが、phpmyadminはそのプロセスのためのビットを打ち負かす...私はまた、マスターの後ろに秒が特定のレートを交差する場合、アラートのような機能を含むかもしれないこのタスクに向けて何かを考えていた、それはクールだろう:) – Ran

7

我々は、次のbashスクリプトを使用しています。あなたはPHPとWebベースのコードで同じ考えをすることができます。

#!/bin/sh 
## Joel Chaney## 
## [email protected] (look at robots.txt) ## 
## 2012-02-03 ## 

repeat_alert_interval=30  # minutes for lock file life 
lock_file=/tmp/slave_alert.lck # location of lock file 

[email protected] # where to send alerts 
SSTATUS=/tmp/sstatus   # location of sstatus file 

### Code -- do not edit below ## 
NODE=`uname -n` 
## Check if alert is locked ## 
function check_alert_lock() { 
    if [ -f $lock_file ] ; then 
     current_file=`find $lock_file -cmin -$repeat_alert_interval` 
     if [ -n "$current_file" ] ; then 
      # echo "Current lock file found" 
      return 1 
     else 
      # echo "Expired lock file found" 
      rm $lock_file 
      return 0 
     fi 
    else 
     touch $lock_file 
    return 0 
    fi 
} 

SLAVE=mysql 

$SLAVE -e 'SHOW SLAVE STATUS\G' > $SSTATUS 

function extract_value { 
    FILENAME=$1 
    VAR=$2 
    grep -w $VAR $FILENAME | awk '{print $2}' 
} 

Master_Binlog=$(extract_value $SSTATUS Master_Log_File) 
Master_Position=$(extract_value $SSTATUS Read_Master_Log_Pos) 
Master_Host=$(extract_value $SSTATUS Master_Host) 
Master_Port=$(extract_value $SSTATUS Master_Port) 
Master_Log_File=$(extract_value $SSTATUS Master_Log_File) 
Read_Master_Log_Pos=$(extract_value $SSTATUS Read_Master_Log_Pos) 
Slave_IO_Running=$(extract_value $SSTATUS Slave_IO_Running) 
Slave_SQL_Running=$(extract_value $SSTATUS Slave_SQL_Running) 
Slave_ERROR=$(extract_value $SSTATUS Last_Error) 

ERROR_COUNT=0 
if [ "$Master_Binlog" != "$Master_Log_File" ] 
then 
    ERRORS[$ERROR_COUNT]="master binlog ($Master_Binlog) and Master_Log_File   ($Master_Log_File) differ" 
    ERROR_COUNT=$(($ERROR_COUNT+1)) 
fi 

POS_DIFFERENCE=$(echo ${Master_Position}-${Read_Master_Log_Pos}|bc) 

if [ $POS_DIFFERENCE -gt 1000 ] 
then 
    ERRORS[$ERROR_COUNT]="The slave is lagging behind of $POS_DIFFERENCE" 
    ERROR_COUNT=$(($ERROR_COUNT+1)) 
fi 

if [ "$Slave_IO_Running" == "No" ] 
then 
    ERRORS[$ERROR_COUNT]="Replication is stopped" 
    ERROR_COUNT=$(($ERROR_COUNT+1)) 
fi 

if [ "$Slave_SQL_Running" == "No" ] 
then 
    ERRORS[$ERROR_COUNT]="Replication (SQL) is stopped" 
    ERROR_COUNT=$(($ERROR_COUNT+1)) 
fi 

if [ $ERROR_COUNT -gt 0 ] 
then 
    if [ check_alert_lock == 0 ] 
     then 
      SUBJECT="${NODE}-ERRORS in replication" 
      BODY='' 
      CNT=0 
      while [ "$CNT" != "$ERROR_COUNT" ] 
      do 
      BODY="$BODY ${ERRORS[$CNT]}" 
      CNT=$(($CNT+1)) 
      done 
      BODY=$BODY" \n${Slave_ERROR}" 
      echo $BODY | mail -s "$SUBJECT" $EMAIL 
     fi 
else 
    echo "Replication OK" 
fi 
+1

これは、複製に失敗しましたか? – jeffry

0

あなたは、スレーブが最新であるかどうかでちょうど興味があるなら:

mysqlのは、「showスレーブステータスの\ G」-e「あなたの接続情報」| grepの-i seconds_behind

5
#!/bin/bash 

HOST=your-server-ip 
USER=mysql-user 
PASSWORD=mysql-password 
SUBJECT="Mysql replication problem" 
[email protected] 

RESULT=`mysql -h $HOST -u$USER -p$PASSWORD -e 'show slave status\G' | grep Last_SQL_Error | sed -e 's/ *Last_SQL_Error: //'` 
if [ -n "$RESULT" ]; then 
    echo "$RESULT" | mail -s "$SUBJECT" $EMAIL 
fi 
1

私は奴隷の状態を確認するためにPHPのWebページを使用して、ページを監視するために、標準的な監視ツールを取得し、最も基本的なビーイングを、いくつかの異なるアプローチを使用しました。これは、既存の監視ツールをWebページをチェックしてアラートに使用できるという意味で優れたアプローチです。

例:

http://mywebserver.com/replicationtest.php?host=db1.internal

db1.internalホストでデータベースサーバの状態を確認するために、常に "はい"

replicationtest.php返す必要があります:あなたは

<?php 

$username="myrepadmin"; 
$password=""; 
$database="database"; 

mysql_connect($_REQUEST['host'],$username,$password); 
@mysql_select_db($database) or die("Unable to select database"); 

$query="show slave status;"; 

$result=mysql_query($query); 
$arr = mysql_fetch_assoc($result); 
echo $arr['Slave_SQL_Running'] ; 

mysql_close(); 

?> 

をSeconds_Behind_Master、Last_IO_Errno、Last_SQL_Errnoなども監視できます。 このWebページを外部から監視することができますWebページをチェックできる多くの標準的な監視ツールに追加することができます。あなたは、Webインターフェイスで偉大なサーバ監視ツールを提供し、偉大な情報の多くを提供してMySQLのプラグインが含まれhttp://newrelic.com社内インフラストラクチャにサードパーティから実行されているコードを気にしない場合、私は、http://monitor.us

代わりに無料のサービスを使用しましたQuery Analysis、InnoDBメトリクス、および遅延モニタを使用したレプリケーションステータスなど)。 New Relicはウェブアプリの監視を専門としていますが、無料サービスでは無制限の数のサーバーを監視できます。

私は現在、長期性能および傾向分析を表示するための緊急事態のためにアラートをトリガーするために使用されている上記のWebページでこれらのツールを組み合わせて使用​​し、NewRelicツール。

1

質問です:

  • はあなたのMySQLのレプリケーションが
  • OKであるかどうかを知りたいか、あなたのデータが一致しているかどうかを知りたいのですか?

あなたのスレーブがマスターと同じであるかどうかを知るためだけのSHOW SLAVEのSTATUS出力に依存することはできません。(悪い)あなたのレプリケーションを停止し、エラーを解決しようと、いくつかのINSERTまたはUPDATEまたは何のことを意味し得ますあなたの奴隷には決して現れなかった。

これを確認するには、スレーブ状態を表示する必要があります。もちろん、すべての出力がOKですが、データ(行数、チェックサムなど)も比較する必要があります。

私はそれを行うためのPHPツールを書いた:https://bitbucket.org/verticalassertions/verticalslave それは特徴:

  • チェックの複製(ショースレーブステータス値のチェック、テーブルをチェックし、チェックサムテーブル、...)
  • チェックを(エラーで複写テーブルの+ダンプ上記と同じ)、オートリペアで複製
  • (設定に記載されている)非レプリケートされたデータベース
  • のダンプリセット複製あなたは地面にすべてを壊した - レプリケートされたデータベースの基本的ダンプとsタルトスレーブ)メールで
  • 送信短縮レポート、ウェブサイトのバージョンの完全なレポートへのリンクは
  • 店の過去が
  • は、CLI(のcrontab)から実行することができますまたは手動でウェブサイトからあなたが設定

フィールを報告しますフォークして改善してください。私はいくつかのツールが(特にレイアウトxDの)より優れていると確信していますが、私は正確に私が尋ねたことはありません。

関連する問題