我有一個主/從MySql複製。MySql - 複製監控工具
進出口尋找一個工具,可以讓我監控複製(看它有沒有錯誤,請檢查滯後等)
我更喜歡一個可視化工具,將允許所有團隊成員獲得知名度狀態而不是腳本工具。
有什麼想法?
我有一個主/從MySql複製。MySql - 複製監控工具
進出口尋找一個工具,可以讓我監控複製(看它有沒有錯誤,請檢查滯後等)
我更喜歡一個可視化工具,將允許所有團隊成員獲得知名度狀態而不是腳本工具。
有什麼想法?
你可以使用任何編程語言,從查詢MySQL和獲取結果:
show slave status; <-- execute on slave
show master status; <-- execute on master
如果你認爲這是一個壞主意,然後安裝phpmyadmin
,有一個已經內置了圖形用戶界面的複製監視,如:http://demo.phpmyadmin.net/master-config/(複製)
我們正在使用下面的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
如果你在從是否是最新的或不只是興趣:
mysql的「你的連接信息」 -e「顯示從狀態\ G」 | 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網頁,檢查站狀態,然後讓標準的監視工具來監視頁面。這是一個不錯的方法,因爲它意味着您可以通過檢查網頁來將現有的監控工具用於警報。
實例:檢查在主數據庫服務器的狀態db1.internal
http://mywebserver.com/replicationtest.php?host=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等。 您可以在外部監控此網頁,或將其添加到許多可以檢查網頁的標準監視工具中。我用免費服務http://monitor.us
另外,如果你不想讓自己的內部基礎設施http://newrelic.com與Web界面提供了極大的服務器監控工具,幷包括一個MySQL插件,它提供了很多偉大的信息介意第三方運行的代碼如查詢分析,InnoDB指標和具有滯後監視器的複製狀態。 New Relic專注於Web應用監控,但免費服務允許您監控無限數量的服務器。
我目前使用這些工具的組合,上面的網頁用於觸發緊急情況的警報,以及用於查看長期性能和趨勢分析的NewRelic工具。
的問題是:
你不能只依靠SHOW SLAVE STATUS輸出知道,如果你的奴隸等同於法師:一個(壞)試圖解決您停止複製的錯誤可能意味着一些INSERT或UPDATE或什麼的,從未出現在你的奴隸身上。要檢查這一點,你必須閱讀SHOW SLAVE STATUS,當然,在輸出中一切都必須正常,但是你也必須比較數據(即行數,校驗和......)。
我寫了一個PHP工具,要做到這一點:https://bitbucket.org/verticalassertions/verticalslave 它的特點:
感覺免費分岔和改進。我確定有些工具比較好(特別是在xD版),但是我需要一個工具來完成我所要求的工作,而且我不能想象那些花哨的東西。
您正在尋找可下載的工具?或者某人可以構建的工具? – 2011-12-15 11:17:18
我喜歡SAAS或下載[MySQL的監視複製]的 – Ran 2011-12-15 12:18:37
可能重複(http://stackoverflow.com/questions/1075433/mysql-monitor-replication) – jweyrich 2012-07-20 04:03:28