博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
主从复制延时判断
阅读量:5167 次
发布时间:2019-06-13

本文共 3253 字,大约阅读时间需要 10 分钟。

在生产环境中,主从复制常常会有复制延迟的现象,主要是master是并发的写,而slave是单线程的应用relay log,所以会出现复制延时,在MySQL 5.6版本中有了基于库的多线程复制。还有MariaDB的并行复制。但是我们使用MySQL 5.5的版本也比较多。如何判断复制是否延时呢?工具现在可以使用的有pt-heartbeat,但是如果我们自己明白怎么样判断复制是否延时的话,自己写简单的shell脚本或者python脚本也可以完成。

复制是否延时的判断标准如下

不要通过Seconds_Behind_Master去判断,该值表示slave上SQL线程和IO线程之间的延迟

1、首先看 Relay_Master_Log_File 和 Master_Log_File 是否有差异
2、如果Relay_Master_Log_File 和 Master_Log_File 有差异的话,那说明延迟很大
3、如果Relay_Master_Log_File 和 Master_Log_File 没有差异,再来看Exec_Master_Log_Pos 和 Read_Master_Log_Pos 的差异,那么更加严谨的做法是同时在主库执行show master status和在从库上面执行show slave status 的输出进行比较。MHA就是这样保证数据一致性的。MMM都没有做到。这也算MHA比MMM更加优秀的地方。
so,根据上面的规则,我写了简单的shell脚本,如下:
#!/bin/bash# 判断主从复制是否延迟# //www.cnblogs.com/xuanzhi201111/ # slaves_psswd=123456s_user=roots_port=3306s_host=localhost# masterm_psswd=123456m_user=rootm_port=3306m_host=192.168.0.102slave_wan_ip=`ifconfig | sed -n '/inet /{s/.*addr://;s/ .*//;p}' | head -n1`while truedo    sleep 1    echo -e "\e[1;33m###################################\e[0m"    Master_Log_File=$(mysql -u$s_user -p$s_psswd -h$s_host -P$s_port -e "show slave status\G" | grep -w Master_Log_File | awk -F": " '{print $2}')    Relay_Master_Log_File=$(mysql -u$s_user -p$s_psswd -h$s_host -P$s_port -e "show slave status\G" | grep -w Relay_Master_Log_File | awk -F": " '{print $2}')    Read_Master_Log_Pos=$(mysql -u$s_user -p$s_psswd -h$s_host -P$s_port -e "show slave status\G" | grep -w Read_Master_Log_Pos | awk -F": " '{print $2}')    Exec_Master_Log_Pos=$(mysql -u$s_user -p$s_psswd -h$s_host -P$s_port -e "show slave status\G" | grep -w Exec_Master_Log_Pos | awk -F": " '{print $2}'|sed 's/[ \t]*$//g')    Master_Log_File_Num=`echo $Master_Log_File | awk -F '.' '{print $2}' | sed 's/^0\+//'`    Master_File=$(mysql -u$m_user -p$m_psswd -h$m_host -P$m_port -Nse "show master status" | awk '{print $1}')    Master_Pos=$(mysql -u$m_user -p$m_psswd -h$m_host -P$m_port -Nse "show master status" | awk '{print $2}'|sed 's/[ \t]*$//g')    Master_File_Num=`echo $Master_File | awk -F '.' '{print $2}' | sed 's/^0\+//'`    if [ -z $Master_Log_File ] && [ -z $Relay_Master_Log_File ] && [ -z $Read_Master_Log_Pos ] && [ -z $Exec_Master_Log_Pos ]    then        echo -e "\e[1;31mSLAVE 没有取到值,请检查参数设置!\e[0m"        exit 1    fi    if [ $Master_Log_File = $Relay_Master_Log_File ] && [ $Read_Master_Log_Pos = $Exec_Master_Log_Pos ]    then        if [ $Master_Log_File = $Master_File ] && [ $Exec_Master_Log_Pos = $Master_Pos ]        then            echo -e "\e[1;32mMaster-slave 复制无延迟 ^_^\e[0m"        else            if [ $Master_Log_File_Num -gt $Master_File_Num ] || [ $Master_Pos -gt $Exec_Master_Log_Pos ]            then                log_count=$(expr $Master_Log_File_Num - $Master_File_Num)                pos_count=$(expr $Master_Pos - $Exec_Master_Log_Pos)                echo -e "\e[1;31mMaster-slave 复制延迟 !!!\e[0m"                echo -e "\e[1;31mMaster:$m_host Slave:$slave_wan_ip\e[0m"                echo -e "\e[1;31mMaster当前binlog: $Master_File"                echo -e "\e[1;31mSlave当前binlog:  $Master_Log_File"                echo -e "\e[1;31mbinlog相差文件数: $log_count\e[0m"                echo -e "\e[1;31mPos点相差:        $pos_count\e[0m"            fi        fi    fidone复制代码

 

转载于:https://www.cnblogs.com/xuanzhi201111/p/3998574.html

你可能感兴趣的文章
第四天
查看>>
PHP实现导出CSV文件
查看>>
专题四--1009
查看>>
KMP的妙用(利用next数组寻找字符串的循环节)
查看>>
前端大神
查看>>
虚表思考-再探虚表布局
查看>>
锋利的jQuery--jQuery事件,动画(读书笔记二)
查看>>
git使用总结
查看>>
微信公众号的搭建-第四天-完成消息接受和返回响应的消息类型
查看>>
MVC5 网站开发之五 展示层架构
查看>>
JVM、redis缓存适用场景
查看>>
iphone手机上的click和touch事件
查看>>
非传统题【A002】
查看>>
谷歌浏览器&360浏览器安装——有道云笔记插件
查看>>
C++的静态初始化和注意事项
查看>>
简明Python教程学习笔记8
查看>>
CTF—训练平台——Crypto
查看>>
提高搜索引擎结果页面排名的各种技术
查看>>
[Security_Android] Android FTPServer 1.9.0 - Remote DoS 代码分析
查看>>
使用Eclipse中的反编译插件jadClipse查看Class源码
查看>>