shell监控MySQL主从状态脚本两则

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

内容为自己的一点总结,如有不对欢迎狠劲儿拍砖

本文来自http://yijiu.blog.51cto.com/转载请经博主同意

监控主从复制正常与否

相比各位都应该知道,监控主从是否工作正常,涉及命令如下:

1
show slave status\G;

那么,我们需要关注的参数如下:

1. 首先查看SQL和IO线程是否为YES状态(想必各位都明白了)

2. 是否有延迟 是否大于0   #一般生成环境延迟是否大于500秒,如果大于500则报警,如大于1000则严重报警

#比如传递一个sql到slave上,binlog中在eventhear中存在time stamp时间戳,在下条binlog拿到的时间会进行比较,如果当前时间是多少则显示多少,如果更新非常频繁500秒会产生更多的sql积累在其中

至少生产中监控就是这么实现的以及包括nagios的监控插件也是这么实现的


主要关注的值本文来自http://yijiu.blog.51cto.com/转载请经博主同意,

1
2
3
4
5
6
7
8
9
10
1.
Master_Log_File 
Read_master_log_Pos
  
2.
Relay_Master_Log_File
Exec_Master_log_pos
  
3.
Seconds_Behind_master

判断一个库主要观察以上几点,如果主库挂了,Seconds_Behind_master 会已经成为NULL了

那么这样如何去观测从库是否日志同步完成,如下所示


通过shell实现监控同步的方法

废话不多说了直接上菜

1.利用status去观测是否已经同步完成

判断公式

以下为判断依据,判断以下值

Master_Log_File 和 Relay_Master_Log_File 的值必须相等

判断同步的偏移量

Read_master_log_Pos 和 Exec_Master_log_pos 的值必须相等

根据以上为最基础的判断依据,是否可将其从库提升为主库,就会在从库中判断master log file 是否读到的位置一样并找到一个最靠前的一个节点提升为主

shell内容如下所示:本文来自http://yijiu.blog.51cto.com/转载请经博主同意

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
user= 'root'
password= 'mypass'
thread_status=` /usr/local/mysql/bin/mysql  -u "$user"  -p "$password"  -S  /tmp/mysql_3308 .sock -e  'show slave status\G' | grep  -i  yes | wc  -l`
status=(` /usr/local/mysql/bin/mysql  -u "$user"  -p "$password"  -S  /tmp/mysql_3308 .sock -e  'show slave status\G' egrep  -i  "Master_Log_File|Relay_Master_Log_File|Read_master_log_Pos|Exec_Master_log_pos|Seconds_Behind_Master"  | awk  -F ':'  '{print $2}' `)
echo  ${status[4]}
 
if  [[  "$thread_status"  != 2 ]];  then
         echo  "the Replication is Fault , at $(date)"  > $catalog
         echo  ` uname  -n` | mail umail@qq.com < $catalog
         exit  1
fi
 
if  [[  "${status[4]}"  '300'  ]]; then
         echo  "yan chi guo gao, at $(date)"   > $catalog
         echo  ` uname  -n` | mail umail@qq.com < $catalog
         exit  2
fi
 
if  [[ ${status[0]} == ${status[2]} ]] && [[ ${status[1]} == ${status[3]} ]];  then
         echo  'The Replication is Normal'
         exit  0  
   else
         echo  "the Replication is Fault , at $(date)"  > $catalog
         echo  ` uname  -n` | mail umail@qq.com < $catalog
         exit  2
fi

本文来自http://yijiu.blog.51cto.com/转载请经博主同意


2.依赖于程序检测 本文来自http://yijiu.blog.51cto.com/转载请经博主同意

比如程序在master建立表,并随意设置字段,并在master上获取一个时间并写入

now的时间在程序中自行得到并记录,最后在slave中执行select 查看结果是否与时间对应一致

如果时间一样则认为正常,如果master上的时间减去slave上的时间 出现了延迟,那么证明延迟存在的,但是这种方法存在缺陷,比如主库挂了那么则不可用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
user= 'root'
password= 'mypass'
/usr/local/mysql/bin/mysql  -u "$user"  -p "$password"  -e  'replace into master.repl_heart set t=now(),id=1;'  > /dev/null  2>&1
 
master_select=` /usr/local/mysql/bin/mysql  -u "$user"  -p "$password"  -S  /tmp/mysql .sock -e  'select t from master.repl_heart where id=1;'  awk  '{print $2}'  tail  -1`
slave_select=` /usr/local/mysql/bin/mysql  -u "$user"  -p "$password"  -S  /tmp/mysql_3308 .sock -e  'select t from master.repl_heart where id=1;'  awk  '{print $2}'  tail  -1`
 
master_date=` date  -d  "$master_select"  +%s`
slave_date=` date  -d  "$slave_select"  +%s`
delay=` echo  "$master_date" - "$slave_date"  bc `
 
if  [[ $master_date == $slave_date  ]]; then
     echo  'is ok'
    elif  [[ $delay - le  500 ]]; then
      echo  cun zai yan chi  "$delay"
    else
         echo  "the Replication delay too large " $delay " , at $(date)"  > $catalog
     echo  ` uname  -n` | mail umail@qq.com < $catalog
fi

需要注意的是:复制中,如果是行格式,就是主库的时间;如果不是行式,这个方法可以把now()这个内置函数在s脚本中生成再写入


以上,为监控mysql主从的两种shell的写法,如有不足,麻烦指出,感谢各位




本文转自zuzhou 51CTO博客,原文链接:http://blog.51cto.com/yijiu/1572809


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
缓存 监控 关系型数据库
如何根据监控结果调整 MySQL 数据库的参数以提高性能?
【10月更文挑战第28天】根据MySQL数据库的监控结果来调整参数以提高性能,需要综合考虑多个方面的因素
79 1
|
1月前
|
监控 关系型数据库 MySQL
如何监控和诊断 MySQL 数据库的性能问题?
【10月更文挑战第28天】监控和诊断MySQL数据库的性能问题是确保数据库高效稳定运行的关键
139 1
|
3月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
81 2
zabbix agent集成percona监控MySQL的插件实战案例
|
2月前
|
Oracle 关系型数据库 MySQL
shell获取多个oracle库mysql库所有的表
请注意,此脚本假设你有足够的权限访问所有提到的数据库。在实际部署前,请确保对脚本中的数据库凭据、主机名和端口进行适当的修改和验证。此外,处理数据库操作时,务必谨慎操作,避免因错误的脚本执行造成数据损坏或服务中断。
43 0
|
4月前
|
关系型数据库 MySQL Shell
MySQL回滚脚本: 误操作delete binlog回滚shell脚本
MySQL回滚脚本: 误操作delete binlog回滚shell脚本
|
5月前
|
Prometheus 监控 Cloud Native
Prometheus结合Consul采集多个MySQL实例的监控指标
将 Prometheus 与 Consul 结合使用,实现对多个 MySQL 实例的自动发现与监控,不仅提高了监控的效率和准确性,也为管理动态扩缩容的数据库环境提供了强大的支持。通过细致配置每一部分,业务可以获得关键的性能指标和运行健康状况的即时反馈,进而优化资源配置,提高系统的稳定性和可用性。
174 3
|
5月前
|
运维 关系型数据库 MySQL
【实操记录】MySQL主从配置
本文使用MySQL原生支持的主从同步机制,详细记录了配置步骤及运维操作方法,可供大家直接参考、使用。 本文假设已经部署了两台主机的MySQL软件,且数据库服务正常,详细部署步骤可本站搜索:"mysql二进制安装包部署"
188 0
|
7月前
|
SQL 关系型数据库 MySQL
mysql数据库备份shell
mysql数据库备份shell
58 0
|
7月前
|
关系型数据库 MySQL Shell
MySQL【实践 01】Linux 环境 MySQL 数据库备份 shell 脚本(脚本源码及说明+定时任务配置+数据库恢复测试)粘贴可以
MySQL【实践 01】Linux 环境 MySQL 数据库备份 shell 脚本(脚本源码及说明+定时任务配置+数据库恢复测试)粘贴可以
173 0
|
SQL 关系型数据库 Shell
MySQL数据库备份的shell脚本
linux系统下 MySQL的备份脚本
1646 0
下一篇
DataWorks