Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 818|回复: 0

自动监控mysql主从复制状态

[复制链接]

该用户从未签到

发表于 2011-10-17 10:58:09 | 显示全部楼层 |阅读模式
公司的网络环境是这样:
mysql主服务器ip地址分别为:
192.168.0.20,192.168.0.100,192.168.0.105
从服务器ip地址为:192.168.0.30其中
3307端口用来同步192.168.0.20的数据库,其套接字文件为/tmp/mysql2.sock
3308端口用来同步192.168.0.100的数据库,其套接字文件为/tmp/mysql3.sock
3309端口用来同步192.168.0.105的数据库,其套接字文件为/tmp/mysql4.sock
这里我没有讲述如何配置主从复制服务器及如何在同一台服务器通过修改配置文件来开启多个mysql端口
我这里只是描述了如何通过shell脚本来监控主从复制复制之间的状态,以便及时发现与解决问题,你可以通过修改这个脚本来得到更多的信息
脚本原代码如下,没有做任何更多的解释,一看就懂
#!/bin/bash
#written by zhanghy
##### Setting some variables #####
#192.168.10.20-----/tmp/mysql2.sock
#192.168.10.100----/tmp/mysql3.sock
#192.168.10.105----/tmp/mysql4.sock
mycommand=/usr/local/mysql/bin/mysql
server2="192.168.10.20 192.168.10.100 192.168.10.105"
socket="/tmp/mysql2.sock /tmp/mysql3.sock /tmp/mysql4.sock"
ruser2=root
myuser1=root


##### SLAVES: Check replication #####

#check replication status
for i in $socket
    do

    tmpmysql1=$($mycommand -u $myuser1  --socket=$i -e "show slave status\G" | \
                awk 'BEGIN {
                                tel = 0
                        }
                        /Slave_IO_Running: Yes/  { tel++ }
                        /Slave_SQL_Running: Yes/ { tel++ }
                        END {
                                if ( tel == 2 ) {
                                        print "Yes"
                                } else {
                                        print "No"
                                }
                        }'
    )
done
#define display function
report_repl_status()
{
        echo -e "\n"
        echo  "$replication"
        echo  "Master log_bin Positiontmp2mysql1"
}

report_ok_info()
{
        echo -e "\n"
        echo  "Slave Read_Master_Log_Pos($n):$tmp2mysql2"
        echo  "Seconds_Behind_Master:$tmp2mysql3"
}


report_error_info()
{
    echo "Last_Errno($n):$tmp2mysql2"
    echo "Last_Error($n):$tmp2mysql3"
    echo -e "\n"
}
#get mysql master server logbin position  
get_server_logbin_position()
{

    for hostname in $server2
        do
        replication="REPL OK For $hostname - Replicationrocess is fine"
        tmp2mysql1=$($mycommand -u $myuser1  -h "$hostname" -e "show master status\G" | \
            awk '/Position/ {print $2}')
    report_repl_status
    done
}

#get replication slave status where slave is ok
#you can get more information by set variables
output_replication_info()
{
    get_server_logbin_position
    for n in $socket
        do
        tmp2mysql2=$(echo 'show slave status\G' |$mycommand -u $myuser1 --socket=$n | \
            awk '/Read_Master_Log_Pos/ {print $2}')
        tmp2mysql3=$(echo 'show slave status\G' |$mycommand -u $myuser1 --socket=$n | \
            awk '/Seconds_Behind_Master/ {print $2}')
    report_ok_info
    done
   
}
#get slave error information when slave is error
#you can get more information by set variables
output_error_info()
{
    get_server_logbin_position
    for n in $socket
            do
            tmp2mysql2=$(echo 'show slave status\G' |$mycommand -u $myuser1 --socket=$n | \
                awk '/Last_Errno/ {print $2}')

            tmp2mysql3=$(echo 'show slave status\G' |$mycommand -u $myuser1 --socket=$n | \
                awk '/Last_Error/ {print $2}')
    report_error_info   
        done   
}
# Here you generate the part of the output
if [ $tmpmysql1 = 'Yes' ]
then
    output_replication_info
else
    output_error_info
fi
##### END OF SCRIPT #####
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-22 05:37 , Processed in 0.401210 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表