检测mysql主从复制是否正常的shell脚本

http://www.zhaokunyao.com/archives/2371


检测mysql主从复制是否正常的shell脚本

以前写过一文,《检测mysqld是否活着的shell脚本》。
今天看到datacharmer放出来了一个检测主从复制是否正常的shell脚本,转载如下:

#!/bin/bash
 
#主服务器
USERNAME=msandbox
PASSWORD=msandbox
EXPECTED_MASTER_HOST=127.0.0.1
EXPECTED_MASTER_PORT=27371
 
#从服务器
SLAVE_HOST=127.0.0.1
SLAVE_PORT=27372
 
MYSQL="mysql -u $USERNAME -p$PASSWORD "
MASTER="$MYSQL -h $EXPECTED_MASTER_HOST -P $EXPECTED_MASTER_PORT"
SLAVE="$MYSQL -h $SLAVE_HOST -P $SLAVE_PORT"
 
#查看主服务器状态
$MASTER -e 'SHOW MASTER STATUS\G' > mstatus
#查看从服务器状态
$SLAVE -e 'SHOW SLAVE STATUS\G' > sstatus
 
function extract_value {
    FILENAME=$1
    VAR=$2
    grep -w $VAR $FILENAME | awk '{print $2}'
}
 
#主服务器的binlog 和position
Master_Binlog=$(extract_value mstatus File )
Master_Position=$(extract_value mstatus Position )
 
#从服务器上读取到的主服务器信息
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)
 
ERROR_COUNT=0
#...
if [ "$Master_Host" != "$EXPECTED_MASTER_HOST" ]
then
    ERRORS[$ERROR_COUNT]="the slave is not replicating from the host that it is supposed to"
    ERROR_COUNT=$(($ERROR_COUNT+1))
fi
#...
if [ "$Master_Port" != "$EXPECTED_MASTER_PORT" ]
then
    ERRORS[$ERROR_COUNT]="the slave is not replicating from the host that it is supposed to"
    ERROR_COUNT=$(($ERROR_COUNT+1))
fi
 
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
    EMAIL=myname@gmail.com
    SUBJECT="ERRORS in replication"
    BODY=''
    CNT=0
    while [ "$CNT" != "$ERROR_COUNT" ]
    do
        BODY="$BODY ${ERRORS[$CNT]}"
        CNT=$(($CNT+1))
    done
    echo $SUBJECT
    echo $BODY
    echo $BODY | mail -s "$SUBJECT" $EMAIL
else
    echo "Replication OK"
    printf "file: %s at %'d\n" $Master_Log_File  $Read_Master_Log_Pos
fi

———6.2更新:
有人又写了一个新的脚本,用来Monitor and restart MySQL slaves.
下载地址:

http://www.papablues.com/software/mysql_slaverestart.sh.gz

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 MySQL 主从状态检查的 shell 脚本: ```bash #!/bin/bash # MySQL 主服务器信息 MASTER_HOST="master.example.com" MASTER_USER="root" MASTER_PASS="password" # MySQL 从服务器信息 SLAVE_HOST="slave.example.com" SLAVE_USER="root" SLAVE_PASS="password" # 检查主服务器状态 MASTER_STATUS=$(mysql -h $MASTER_HOST -u $MASTER_USER -p$MASTER_PASS -e "SHOW MASTER STATUS") MASTER_LOG_FILE=$(echo $MASTER_STATUS | awk '{print $1}') MASTER_LOG_POS=$(echo $MASTER_STATUS | awk '{print $2}') # 检查从服务器状态 SLAVE_STATUS=$(mysql -h $SLAVE_HOST -u $SLAVE_USER -p$SLAVE_PASS -e "SHOW SLAVE STATUS\G") SLAVE_IO_RUNNING=$(echo $SLAVE_STATUS | grep "Slave_IO_Running" | awk '{print $2}') SLAVE_SQL_RUNNING=$(echo $SLAVE_STATUS | grep "Slave_SQL_Running" | awk '{print $2}') SLAVE_IO_ERROR=$(echo $SLAVE_STATUS | grep "Last_IO_Error" | awk '{print $2}') SLAVE_SQL_ERROR=$(echo $SLAVE_STATUS | grep "Last_SQL_Error" | awk '{print $2}') # 检查主从同步状态 if [ "$SLAVE_IO_RUNNING" == "Yes" ] && [ "$SLAVE_SQL_RUNNING" == "Yes" ]; then echo "Replication is running. Master log file: $MASTER_LOG_FILE, position: $MASTER_LOG_POS" else echo "Replication is not running." echo "Slave_IO_Running: $SLAVE_IO_RUNNING" echo "Slave_SQL_Running: $SLAVE_SQL_RUNNING" echo "Last_IO_Error: $SLAVE_IO_ERROR" echo "Last_SQL_Error: $SLAVE_SQL_ERROR" fi ``` 该脚本会连接到主服务器和从服务器,分别检查它们的状态。如果主从同步正常运行,则会输出主服务器的日志文件和位置。如果主从同步出现问题,则会输出相关错误信息。请注意,这只是一个简单的示例脚本,您可能需要根据自己的需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值