shell脚本修复MySQL主从同步
发布:thebaby   来源:net     【大 中 小】
分享一例shell脚本,用于修改mysql的主从同步问题,有需要的朋友参考下吧。
一个可以修改mysql主从同步的shell脚本。

例子:

复制代码代码示例:
#!/bin/sh
#修复mysql主从同步
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
LOGFILE=/data/repair_mysql_sync_`date +%F`.log
SQLCMD1="show slave status"
#查看MySQL是否启动
retval=`ps aux | grep mysqld | grep -v grep`
if [ "${retval}X" = "X" ]; then
    echo The MySQL is not running at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
    exit 1
fi
#获得MySQL从端Relay binlog的路径
retval=`grep "^relay-log" /etc/my.cnf | grep -v relay-log- | grep '/'`
if [ "${retval}" = "X" ]; then
    RELAY_BINLOG_PATH=`ps aux | grep -w mysqld | grep -v grep | awk '{print $13}' | awk -F '=' '{print $2}'`
else
    RELAY_BINLOG_PATH=`dirname $(echo ${retval} | awk -F '=' '{print $2}')`
fi
#查找master.info文件,用于定位Binlog信息
MASTER_FILE=`ps aux | grep -w mysqld | grep -v grep | awk '{print $13}' | awk -F '=' '{print $2}'`/master.info
if [ ! -e ${MASTER_FILE} ]; then
   echo This Server is not MySQL Slave at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
   exit 1
fi
#获得当前的同步状态
IO_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Slave_IO_Running:" {print $2}'`
SQL_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Slave_SQL_Running:" {print $2}'`
if [[ "${IO_STATUS}" = "Yes" && "${SQL_STATUS}" = "Yes" ]]; then
   echo Now, The MySQL Replication is synchronous at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
   exit 0
fi
#从master.info文件中,获得MySQL主端的同步信息
REPLI_INFO=`sed '/^$/d' ${MASTER_FILE} | tail +2 | head -5`
REPLI_BINLOG_FILE=`echo ${REPLI_INFO} | awk '{print $1}'`
REPLI_IPADDR=`echo ${REPLI_INFO} | awk '{print $3}'`
REPLI_USER=`echo ${REPLI_INFO} | awk '{print $4}'`
REPLI_PWD=`echo ${REPLI_INFO} | awk '{print $5}'`
#删除无用的Relay binlog
rm -rf ${RELAY_BINLOG_PATH}/*-relay-bin.*
#直接从0位置开始同步
SQLCMD2="change master to master_host='${REPLI_IPADDR}', master_user='${REPLI_USER}', master_password='${REPLI_PWD}',"
SQLCMD2="${SQLCMD2} master_log_file='${REPLI_BINLOG_FILE}', master_log_pos=0"
mysql -uroot -e "stop slave;"
mysql -uroot -e "${SQLCMD2};"
mysql -uroot -e "start slave;"
#如果同步的过程中,出现重复记录导致同步失败,就跳过
while true
do
   sleep 2
   IO_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Slave_IO_Running:" {print $2}'`
   SQL_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Slave_SQL_Running:" {print $2}'`
   BEHIND_STATUS=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Seconds_Behind_Master:" {print $2}'`
   SLAVE_BINLOG1=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Master_Log_File:" {print $2}'`
   SLAVE_BINLOG2=`mysql -uroot -e "${SQLCMD1}\G;" | awk '$1=="Relay_Master_Log_File:" {print $2}'`
   #出现错误,就将错误信息记录到日志文件,并跳过错误继续同步
   if [[ "${IO_STATUS}" != "Yes" || "${SQL_STATUS}" != "Yes" ]]; then
       ERRORINFO=`mysql -uroot -e "${SQLCMD1}\G;" | awk -F ': ' '$1=="Last_Error" {print $2}'`
       echo "The MySQL synchronous error information: ${ERRORINFO}" >> ${LOGFILE}
       mysql -uroot -e "stop slave;"
       mysql -uroot -e "set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;"
       mysql -uroot -e "start slave;"
       #已完成同步,就正常退出
   elif [[ "${IO_STATUS}" = "Yes" && "${SQL_STATUS}" = "Yes" && "${SLAVE_BINLOG1}" = "${SLAVE_BINLOG2}" && ${BEHIND_STATUS} -eq 0 ]]; then
      echo The MySQL synchronous is ok at: `date +%F" "%H-%M-%S` >> ${LOGFILE}
      break
 fi
done

您可能感兴趣的文章:
自动配置mysql主从的shell脚本
监控mysql主从健康状态的shell脚本
mysql主从监控的shell脚本

本文地址:http://www.jbxue.com/article/mysql_master_slave_b1dx2f.html

posted on 2013-11-11 06:40 snowfly123 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/linuxnotes/p/3417361.html

shell脚本修复MySQL主从同步相关推荐

  1. 监控mysql主从复制监控_shell脚本监控mysql主从同步状态

    mysql做了主从同步之后,偶尔出现过几次主从同步报错或延迟,由于没有任何监控和报警机制,只有在应用程序报错的时候才能发现数据同步出问题了.所以写了个shell脚本用来检测mysql数据库的同步状态 ...

  2. Shell脚本实现MySQL主从自动化配置

    / 前言 / 该Shell脚本适用于一主一从, 但是如果你需要布置为一主多从或者多主多从只需要简单修改即可, 修改方式在脚本备注中        当前脚本暂无自动安装MySQL的流程, 我会尽快完善, ...

  3. linux 监控mysql脚本_Linux系统MySQL主从同步监控shell脚本

    操作系统:CentOS系统 目的:定时监控MySQL数据库主从是否同步,如果不同步,记录故障时间,并执行命令使主从恢复同步状态 1.创建脚本文件 vi /home/crontab/check_mysq ...

  4. nagios系列(七)nagios通过自定义脚本的方式监控mysql主从同步

    nagios监控mysql主从同步 起因:nagios可能监控到mysql服务的运行情况,但确不能监控mysql的主从复制是否正常:有时候,同步已经停止,但管理人员却不知道. 登陆mysql从服务器, ...

  5. mysql主从同步监控小脚本(加强版)

    mysql主从同步监控小脚本(加强版): 新版本脚本增加了"当发现同步出现无法同步的时候"会自动提取主库的file号,以及pos,进行同步主库,脚本内容如下: #!/bin/sh ...

  6. mysql主从同步配置超详细_MySQL主从同步配置

    一. 理论部分 MySQL主从同步 主从同步使得数据可以从一个数据库服务器复制到其他的服务器上.在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave). 因为复制 ...

  7. 1 MySQL 主从同步

    什么是 MySQL 主从同步 当 master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 主从同步有什么好处 1.水平扩展数据库的负载能力 2.容错,高可用.Failover ...

  8. [MySQL]-主从同步实战-主从搭建

    [MySQL]-主从同步实战 森格 | 2022年12月14日 本文主要为在平时work中遇到的主从同步上的问题的处理,对其进行巩固总结. 一.场景介绍 ​ 在一个风和日丽的下午4点半,突然就收到一个 ...

  9. MySQL主从同步详解与配置

    https://zhuanlan.zhihu.com/p/335142300 MySQL主从同步详解与配置 第一部分[原理解析] * 应用背景* MySQL数据库自身提供的主从复制功能可以方便的实现数 ...

最新文章

  1. Gaussian Filter
  2. C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密
  3. 【Python】【入门】一文带你掌握Python27入门 ~
  4. 利用java反射调用类的的私有方法--转
  5. css 百分比 怎么固定正方形_你未必知道的49个CSS知识点
  6. 关于hkcmd.exe造成的和Eclipse之间热键冲突
  7. [读书笔记] 设计模式与游戏完美开发
  8. Qt容器类(总结)(新发现的QQueue和QStack,注意全都是泛型)
  9. [转载] AttributeError: ‘numpy.ndarray‘ object has no attribute ‘insert‘的解决方法
  10. csharp为何不流行_“我太南了”这些年度流行语到底是怎么选的?
  11. Excel数据导入sql临时表操作步骤
  12. alfafile中转站免费_免费、不限速的文件中转站or网盘
  13. 【Unity】Mesh网格编程(一)正二十面体
  14. mysql列名命名_重命名MySQL中的列名?
  15. 如何处理四级标题、五级标题及其对应的样式?
  16. Oralce Autovue Web Server (Servlet)启动异常
  17. 图像融合论文及代码网址整理总结(1)——多聚焦图像融合
  18. 【记录】深度学习之蒸馏法训练网络
  19. 特斯拉充电异常甩锅国家电网,被“打脸”后致歉
  20. Annotation-specified bean name.. for bean class ...

热门文章

  1. 为拯救爸妈朋友圈,达摩院造了“谣言粉碎机”
  2. 小论Java类变量的隐私泄露
  3. kotlin 类及其成员的可见性
  4. SpringMVC 类扫描原理解析
  5. mysql数据库基本操作练习
  6. 【IOS-COCOS2D游戏开发之十】添加粒子系统特效并解决粒子特效与LAYER之间的坐标问题;...
  7. 通过checkbox选择以逗号拼接删除字符串
  8. 使用HSRP和SLB实现服务器群负载均衡和冗余
  9. JS日历控件集合----附效果图、源代码
  10. iphone-common-codes-ccteam源代码 CCUIAlertView.m