1. 这篇文章主要介绍了在CentOS系统下编写shell脚本来监控主从复制的教程,文中举了两个发现故障后再次执行复制命令的例子,需要的朋友可以参考下

目的:定时监控MySQL主从数据库是否同步,如果不同步,记录故障时间,并执行命令使主从恢复同步状态

1、创建脚本文件

  1. vi /home/crontab/check_mysql_slave.sh #编辑,添加下面代码
  1. #!/bin/sh
  2.  
  3. # check_mysql_slave status
  4.  
  5. ip=eth0 #网卡名称
  6.  
  7. mysql_binfile=/usr/local/mysql/bin/mysql
  8.  
  9. mysql_user=root #MySQL数据库账号
  10.  
  11. mysql_pass=123456 #密码
  12.  
  13. mysql_sockfile=/tmp/mysql.sock
  14.  
  15. datetime=`date +"%Y-%m-%d/%H:%M:%S"` #获取当前时间
  16.  
  17. mysql_slave_logfile=/home/logs/check_mysql_slave.log #日志文件路径,必须提前创建好
  18.  
  19. slave_ip=`ifconfig $ip|grep "inet addr" | awk -F[:" "]+ '{print $4}'`
  20.  
  21. status=$($mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "show slave status\G" | grep -i "running")
  22.  
  23. Slave_IO_Running=`echo $status | grep Slave_IO_Running | awk ' {print $2}'`
  24.  
  25. Slave_SQL_Running=`echo $status | grep Slave_SQL_Running | awk '{print $2}'`
  26.  
  27. if [ "$Slave_IO_Running" = "Yes" -a "$Slave_SQL_Running" = "Yes" ]
  28.  
  29. then echo "Slave is Running!"
  30.  
  31. else
  32.  
  33. echo " $datetime $slave_ip Slave is not running!" >> $mysql_slave_logfile
  34.  
  35. $mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "SLAVE STOP;"
  36.  
  37. $mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;"
  38.  
  39. $mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "SLAVE START;"
  40.  
  41. $mysql_binfile -u$mysql_user -p$mysql_pass -S $mysql_sockfile -e "EXIT"
  42.  
  43. fi
  1. :wq! #保存退出
  2.  
  3. chmod +x /home/crontab/check_mysql_slave.sh #添加脚本执行权限

2、添加任务计划,修改/etc/crontab

  1. vi /etc/crontab #在最后一行添加
  2.  
  3. */10 * * * * root /home/crontab/check_mysql_slave.sh #表示每10分钟执行一次
  4.  
  5. :wq! #保存退出

3、重新启动crond使设置生效

  1. /etc/rc.d/init.d/crond restart #yum install -y vixie-cron安装计划任务,某些系统上可能没有预装
  2.  
  3. chkconfig crond on #设为开机启动
  4.  
  5. service crond start #启动

可以根据日志文件/home/logs/check_mysql_slave.log查看MySQL主从同步状态

PS:接下来这个脚本增加了“当发现同步出现无法同步的时候”会自动提取主库的file号,以及pos,进行同步主库,脚本内容如下:

  1. #!/bin/sh
  2. #set -x
  3. #file is slave_repl.sh
  4. #Author by Kevin
  5. #date is 2011-11-13
  6.  
  7. mstool="/usr/local/mysql-3307/bin/mysql -h 192.168.1.106 -uroot -pw!zl7POg27 -P 3307"
  8. sltool="/usr/local/mysql-3307/bin/mysql -h 192.168.1.107 -uroot -pw!zl7POg27 -P 3307"
  9. declare -a slave_stat
  10. slave_stat=($($sltool -e "show slave status\G"|grep Running |awk '{print $2}'))
  11. if [ "${slave_stat[0]}" = "Yes" -a "${slave_stat[1]}" = "Yes" ]
  12. then
  13. echo "OK slave is running"
  14. exit 0
  15. else
  16. echo "Critical slave is error"
  17. echo
  18. echo "*********************************************************"
  19. echo "Now Starting replication with Master Mysql!"
  20. file=`$mstool -e "show master status\G"|grep "File"|awk '{print $2}'`
  21. pos=`$mstool -e "show master status\G"|grep "Pos"|awk '{print $2}'`
  22. $sltool -e "slave stop;change master to master_host='192.168.1.106',master_port=3307,master_user='repl',master_password='w!zl7POg27',master_log_file='$file',master_log_pos=$pos;slave start;"
  23. sleep 3
  24. $sltool -e "show slave status\G;"|grep Running
  25. echo
  26. echo "Now Replication is Finished!"
  27. echo
  28. echo "**********************************************************"
  29. exit 2
  30. fi
 
运行后效果,如下:
 
  1. # ./slave_stop3307.sh
  2. *******************************
  3. Now stop Slave Replication!
  4. Slave_IO_Running: No
  5. Slave_SQL_Running: No
  6. *******************************
  7. # ./slave_repl3307.sh
  8. Critical slave is error
  9. *********************************************************
  10. Now Starting replication with Master Mysql!
  11. Slave_IO_Running: Yes
  12. Slave_SQL_Running: Yes
  13. Now Replication is Finished!
  14. **********************************************************

CentOS下编写shell脚本来监控MySQL主从复制的教程的更多相关文章

  1. 在windows下编写shell脚本

    注意两点: 1.第一行:#!/bin/bash 2.将文档格式转换为unix,因为在windows下编写shell脚本回车符是\n\r,而linux下的回车符是\n,所以在linux下运行脚本的时候, ...

  2. shell监控脚本实例—监控mysql主从复制

    分享一例shell脚本,用于监测mysql数据库的主从复制,有需要的朋友不妨参考学习下. 转自:http://www.jbxue.com/article/14103.html(转载请注明出处) 本节内 ...

  3. linux环境下编写shell脚本实现启动停止tomcat服务

    第一步:以管理员的身份进入控制台,在指定目录下新建一个shell脚本,我这里命名为tomcat.sh 第二步:编写shell脚本 #!/bin/bash tomcat_home=/usr/tomcat ...

  4. 关于nagios系统下使用shell脚本自定义监控插件的编写以及没有实时监控图的问题

    关于nagios系统下shell自定义监控插件的编写.脚本规范以及没有实时监控图的问题的解决办法 在自已编写监控插件之前我们首先需要对nagios监控原理有一定的了解 Nagios的功能是监控服务和主 ...

  5. 关于nagios系统下使用shell脚本自定义监控插件的编写

    在自已编写监控插件之前我们首先需要对nagios监控原理有一定的了解 Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控.检测功能都是通过各种插件来完成的. 启动Nagios ...

  6. shell脚本检测监控mysql的CPU占用率

    网站访问量大的时候mysql的压力就比较大,当mysql的CPU利用率超过300%的时候就不能提供服务了,近乎卡死状态,这时候最好的方法 就是重启mysql服务.由于这种事具有不可预见性,我们不知道什 ...

  7. windows下编写shell脚本执行错误

    在 windows 下,换行符是 \r\n,在linux下,换行符是 \n.如果你在IDEA里写sh脚本,可以手动设置脚本的换行符为 \n,如果你用notepad++写脚本,可以显示所有字符,以便明确 ...

  8. centos下yum搭建安装linux+apache+mysql+php环境教程

    我们利用linux系统中yum安装Apache+MySQL+PHP是非常的简单哦,只需要几步就可以完成,具体如下: 一.脚本YUM源安装: 1.yum install wget             ...

  9. Centos 6.4上面用Shell脚本一键安装mysql 5.6.15

    Centos 6.4上面用Shell脚本一键安装mysql 5.6.15  #!/bin/bash if [ `uname -m` == "x86_64" ];then machi ...

随机推荐

  1. 膨胀和腐蚀 - cvErode() 和 cvDilate() 函数实现

    前言 膨胀就是对图中的每个像素取其核范围内最大的那个值,腐蚀就相反.这两个操作常用来突出显示图的某个高亮部分或者昏暗部分以及去噪.本文展示两个分别对图像进行膨胀和腐蚀的例子. 膨胀和腐蚀函数 cvEr ...

  2. 微信小程序页面之间的跳转

    一.使用标签跳转             index.wxml:             在index.wxml页面添加一个<navigator>元素,在元素里面使用属性url就可以 二. ...

  3. 【题解】CF359B Permutation

    [题解]CF359B Permutation 求一个长度为\(2n\)的序列,满足\(\Sigma |a_{2i}-a_{2i-1}|-|\Sigma a_{2i}-a_{2i-1}|=2k\) 这种 ...

  4. 题解 P4799 【[CEOI2015 Day2]世界冰球锦标赛】

    题解 P4799 [[CEOI2015 Day2]世界冰球锦标赛] 双向搜索好题 传送门 实际上,双向搜索就是把\(a^n\)的复杂度转变成了大多为\(O(nlogna^{\frac{n}{2}})\ ...

  5. python cookbook第三版学习笔记九:函数

    接受任意数量参数的函数. 当传入函数的参数个数很多的时候,在函数定义的时候不需要为每一个参数定义一个变量,可以用*rest的方式来包含多余的参数. 如下面的代码,*rest包含了2,3,4这3个参数. ...

  6. 关于jquery-weui.js中时间控件datetimepicker的使用

    今天第一次接触jquery-weui,不太了解用法,然而官方文档写的也很简略,只好打开源代码进行研究,我想要的是设置开始日期大于当前日期,然后在源码中发现有min这个默认为undefined的属性,于 ...

  7. linux下更改文件夹名

    mv 旧文件夹名 新文件夹名 mv /usr/bin/python_old /usr/bin/python_new

  8. 3D焦点图插件

    在线演示 本地下载

  9. Spring Boot2.0之整合多数据源

    一般公司分两个数据库: 一个放共同配置文件, 一个数据库垂直业务数据库 垂直拆分和水平拆分: 垂直是根据业务划分具体数据库 在一个项目中有多个数据源(不同库jdbc) 无限个的哈~ 根据包名 或者 注 ...

  10. Contiki 2.7 Makefile 文件(二)

    二.Makefile.include 1.第一部分 (1) ifndef CONTIKI ${error CONTIKI not defined! You must specify where Con ...