MySql - 复制监控工具

Ran*_*Ran 6 mysql mysql-management

我有一个主/从MySql复制.

我正在寻找一种工具,可以让我监控复制(看它没有错误,检查滞后等)

我更喜欢一种可视化工具,它允许所有团队成员了解状态,而不是脚本工具.

有任何想法吗?

小智 7

我们使用以下bash脚本.你可以在PHP和web基础上做同样的想法代码.

#!/bin/sh
## Joel Chaney##
## joel.chaney@mongoosemetrics.com  (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=YOURNAME@YOURCOMPANY.DOM  # 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 Exec_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
Run Code Online (Sandbox Code Playgroud)


MCu*_*elo 7

#!/bin/bash

HOST=your-server-ip
USER=mysql-user
PASSWORD=mysql-password
SUBJECT="Mysql replication problem"
EMAIL=your@email.address

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
Run Code Online (Sandbox Code Playgroud)


ajr*_*eal 3

您可以使用任何编程语言来查询 mysql 并从以下位置获取结果:

show slave status;  <-- execute on slave
show master status; <-- execute on master
Run Code Online (Sandbox Code Playgroud)

如果你认为这是一个坏主意,那么安装phpmyadmin,已经有一个内置的用于复制监控的GUI,例如: http: //demo.phpmyadmin.net/master-config/(复制)