监控Mysql主从

回复 收藏
本帖最后由 清茶一杯 于 2016-4-12 15:18 编辑

1.shell监控主从同步
编写一shell脚本,监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主从有问题了
___________________________________________________________
vim /sh/mysql_slave.sh

#!/bin/bash
#check MySQL_Slave Status
#crontab time 00:10
MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $4}'`
MYSQLIP=`ifconfig eth0|grep "inet addr" | awk -F[:" "]+ '{print $4}'`
STATUS=$(/usr/local/mysql/bin/mysql -u szk5043 -pszk5043 -S /tmp/mysql.sock -e "show slave status\G" | grep -i "running")
IO_env=`echo $STATUS | grep IO | awk ' {print $2}'`
SQL_env=`echo $STATUS | grep SQL | awk '{print $2}'`


if [ "$MYSQLPORT" == "3306" ]
      then
   echo "mysql is running"
      else
   mail -s "warn!server: $MYSQLIP mysql is down" szk5043@foxmail.com
fi

if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ]
      then
   echo "Slave is running!"
      else
   echo "####### $date #########">> /tmp/check_mysql_slave.log
   echo "Slave is not running!" >> /tmp/check_mysql_slave.log
   mail -s "warn! $MySQLIP_replicate_error" szk5043@foxmail.com
fi

建议每十分钟运行一次。

*/10 * * * * root /bin/sh /sh/mysql_slave.sh  
记得在每台MySQL从机上分配一个szk5043的用户,权限大些也没关系,只限定在本地运行,如下所示:

mysql>grant all privileges on *.* to szk5043@localhost identified by 'szk5043';

mysql>grant all privileges on *.* to szk5043@127.0.0.1 identified by 'szk5043';


脚本设计思路:
1、此脚本应该能适应各种各样不同的内外网环境,即IP不同的环境;
2、让脚本也顺便监控下MySQL是否正常运行;

2.zabbix监控主从同步
编写一shell脚本,监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主从有问题了

___________________________________________________________
a.首先给mysql分配一个监控的账号

mysql> grant replication client on *.* to 'zabbix'@'localhost';

b.编写一个脚本

vim /sh/mysql-replication.sh
#!/bin/bash
/usr/local/mysql/bin/mysql -uzabbix -e 'show slave status\G' |grep -E "Slave_IO_Running|Slave_SQL_Running"|awk '{print $2}'|grep -c Yes

#先用zabbix这个用户来获取slave的所有状态,然后grep出这两个状态,然后再输出第二列,最后查看有几个Yes状态的 ,正常情况下有两个Yes状态。
    其实大家会发现,这只有一条命令,但我却把它写到了一个脚本里面,这里我说一下,因为如果你把命令写到配置文件里面,每次修改完,你都得重启agent,所以写到脚本里面更方便调试修改,这应该是一个好习惯。

c.在agent里面添加监控项
文件的最后添加如下一行
vim /etc/zabbix_agentd.conf

UserParameter=mysql.replication,/home/zabbix/mysql-replication.sh
#等号后面的字符串中,逗号前面是Key,后面是执行的脚本(脚本不要忘了执行权限) ,添加好之后,就重启agent程序

d.server端添加监控项
zabbix_get -s 192.168.1.202 -p10050 -k "mysql.replication"
2

#这里的192.168.1.202是我的agent的IP ,如果主从复制正常,就会返回2 (代表两个状态都是Yes)
现在就说明server已经可以从agent获取状态了。
现在在管理界面中先添加监控项:
系统配置 -》主机 -》选择要监控的主机的监控项
1.png


2.png

3.png

4.png

e .测试

[root@lab-1-C6 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!


5.png













2016-04-12 15:15 举报
已邀请:
0

栋佐

赞同来自:

学习
0

ggangelo

赞同来自:

有办法去掉mysql这句吗?shell脚步运行后:mysql: [Warning] Using a password on the command line interface can be insecure.
0

渐行渐远

赞同来自:

不错,看看
0

贰零壹陆

赞同来自:

你好,我按照你的步骤来实验,在从机上脚本执行成功输出2,在zabbix服务端上验证就收不到信息
[root@localhost ~]# zabbix_get -s 192.168.229.125 -p10050 -k "mysql.replication"
ZBX_NOTSUPPORTED
可有解决方法?防火墙都关了,脚本有+x权限了!
0

sy0258

赞同来自:

给zabbix加监控的权限这一步很重要
0

zh_414

赞同来自:

很好,学习了{:4_107:}

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: