私はマスター/スレーブのMySQLのレプリケーションを持っています。MySql - レプリケーション監視ツール
私はレプリケーションを監視することができますツールを探してイム(など、遅れを確認、それは誤りがない参照)
私はすべてのチームメンバーが、上の可視性を得ることができます視覚的なツールを好みますステータスであり、スクリプトツールではありません。
MySQLを照会してから結果を取得するために、任意のプログラミング言語を使用することができます
私はマスター/スレーブのMySQLのレプリケーションを持っています。MySql - レプリケーション監視ツール
私はレプリケーションを監視することができますツールを探してイム(など、遅れを確認、それは誤りがない参照)
私はすべてのチームメンバーが、上の可視性を得ることができます視覚的なツールを好みますステータスであり、スクリプトツールではありません。
MySQLを照会してから結果を取得するために、任意のプログラミング言語を使用することができます
:あなたは、これは悪いアイデアだと思う場合は、phpmyadmin
をインストール
show slave status; <-- execute on slave
show master status; <-- execute on master
、レプリケーション監視のために、すでに組み込みのGUIがあります、のように:http://demo.phpmyadmin.net/master-config/(複製)
私はもっと使いやすいツールを探していましたが、phpmyadminはそのプロセスのためのビットを打ち負かす...私はまた、マスターの後ろに秒が特定のレートを交差する場合、アラートのような機能を含むかもしれないこのタスクに向けて何かを考えていた、それはクールだろう:) – Ran
我々は、次の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
これは、複製に失敗しましたか? – jeffry
あなたは、スレーブが最新であるかどうかでちょうど興味があるなら:
mysqlのは、「showスレーブステータスの\ G」-e「あなたの接続情報」| grepの-i seconds_behind
#!/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
私は奴隷の状態を確認するために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ツール。
質問です:
あなたのスレーブがマスターと同じであるかどうかを知るためだけのSHOW SLAVEのSTATUS出力に依存することはできません。(悪い)あなたのレプリケーションを停止し、エラーを解決しようと、いくつかのINSERTまたはUPDATEまたは何のことを意味し得ますあなたの奴隷には決して現れなかった。
これを確認するには、スレーブ状態を表示する必要があります。もちろん、すべての出力がOKですが、データ(行数、チェックサムなど)も比較する必要があります。
私はそれを行うためのPHPツールを書いた:https://bitbucket.org/verticalassertions/verticalslave それは特徴:
フィールを報告しますフォークして改善してください。私はいくつかのツールが(特にレイアウトxDの)より優れていると確信していますが、私は正確に私が尋ねたことはありません。
ダウンロードするツールをお探しですか?誰かが作ることができるツールですか? –
私はSAASを好むか、 – Ran
の[MySQL Monitor Replication]の複製をダウンロードしてください。(http://stackoverflow.com/questions/1075433/mysql-monitor-replication) – jweyrich