GeekTop
  • 首页
  • 关于

GeekTop

不止代码

解决 MySQL 异常关闭的问题

解决 MySQL 异常关闭的问题

2015年8月11日 Alex Comments 0 Comment

临时解决了一个MySQL异常关闭的问题,这里记录一下。

测试环境的数据库经常出现异常关闭的情况。因为是测试环境,所以没有针对测试环境做一些高可用的容灾措施。因此临时的解决办法是通过后台脚本来监控MySQL进程的活动情况,当发现MySQL进程关闭的时候,立即重启MySQL进程。这个脚本的思路非常简单,就是不断的检查MySQL的数据库后台进程的运行情况,一旦发现MySQL数据库后台进程异常关闭,立即重新启动数据库,这样可以在不增加硬件投入成本的情况下,提高数据库的可用性,下面是监控脚本:

#!/bin/bash

# 脚本功能
# 每2分钟检测一次MySQL实例的运行状态,如果实例不存在,则重启
# 作者:light.zhang

# 命令路径
MYSQL_SCRIPTS="/usr/local/mysql/support-files/mysql.server"

# 命令时间间隔
RUN_INTERVAL=120

# 进程名
PROCESS_NAME="mysqld"

# 输出日志目录
LOGDIR="$HOME/log.txt"

for (( ; ; ))
do
  sleep $RUN_INTERVAL
  PID="$(ps aux | grep $PROCESS_NAME | grep -v grep | awk '{print $2}')"
  if [ "$PID" = "" ]; then
      echo -n "$(date '+%Y-%m-%d %H:%M:%S')" >> $LOGDIR
    echo "  mysqld has down, now try to startup" >> $LOGDIR
    "$MYSQL_SCRIPTS" start >> $LOGDIR
  else
    echo "$(date '+%Y-%m-%d %H:%M:%S') OK" >> $LOGDIR
  fi
done

这样确实在一定程度上解决了MySQL数据库异常关闭的问题,但是运行一段时间以后,这个脚本突然不能正常工作,原因是上面的脚本在单实例MySQL的情况下,是可以正常工作的,但是如果切换到多实例的情况下,由于该脚本是按照MySQL的进程名称来判断MySQL的后台进程是否存活,所以上面的脚本只能保证一个实例可以正常工作,那么有没有办法同时检测两个实例呢?当然有,我们可以根据不同实例的端口号来判断实例的存活状态,修改脚本如下:

#!/bin/bash

# 脚本功能
# 每2分钟检测一次MySQL实例的运行状态,如果实例不存在,则重启
# 作者:light.zhang

# 命令路径
MYSQL_SCRIPTS="/usr/local/mysql/support-files/mysql.server"

# 命令时间间隔
RUN_INTERVAL=120

# 进程名
PROCESS_PORT="3307"

# 输出日志目录
LOGDIR="$HOME/log.txt"

for (( ; ; ))
do
  sleep $RUN_INTERVAL
  PID="$(ps aux | grep $PROCESS_PORT | grep -v grep | awk '{print $2}')"
  if [ "$PID" = "" ]; then
    echo -n "$(date '+%Y-%m-%d %H:%M:%S')" >> $LOGDIR
    echo "  mysqld has down, now try to startup" >> $LOGDIR
    "$MYSQL_SCRIPTS" start >> $LOGDIR
  else
    echo "$(date '+%Y-%m-%d %H:%M:%S') OK" >> $LOGDIR
  fi
done

以上脚本稍作调整即可用来监控多个MySQL实例。


数据库
MySQL

Post navigation

NEXT
使用 Python 监控 MySQL 慢查询日志
PREVIOUS
MySQL 数据库服务器整体规划

发表回复 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

最近文章

  • 姥姥
  • 设计一个可扩展的用户模型
  • 使用 Apple 的 Keychain 保存 SSH 的 passphase
  • 解决 ABA 问题
  • 关于 macOS 上面部分 emoji 无法显示的问题
  • 这些年我技术栈的变化
  • 搬瓦工、狗云、hostodo、oracle对比测试
  • Google Drive 无法上传文件
  • 使用 socks5 代理 git ssh 协议
  • 到底要不要“润”
  • 可复用的代码
  • 关于疫情的一点点反思
  • 我的风控策略(投资篇)
  • 我的风控策略(生活篇)
  • Spring Boot是如何处理异常的
  • 编码与解码
  • 基于统计的图像目标检索
  • 有限状态机和状态模式
  • API安全设计
  • 用户密码的存储策略

近期评论

  • ǝɔɐǝԀʎzɐɹϽ发表在《可复用的代码》
  • Alex发表在《可复用的代码》
  • ǝɔɐǝԀʎzɐɹϽ发表在《到底要不要“润”》
  • ǝɔɐǝԀʎzɐɹϽ发表在《可复用的代码》
  • ǝɔɐǝԀʎzɐɹϽ发表在《我的风控策略(生活篇)》
  • ǝɔɐǝԀʎzɐɹϽ发表在《如何写出简洁优雅的代码》
  • 张志亮发表在《如何写出简洁优雅的代码》

分类

  • AI (2)
  • Java应用安全之道 (1)
    • 加密与解密 (1)
  • Odoo (2)
  • Python (1)
  • 图像处理 (1)
  • 年鉴 (1)
  • 数据库 (10)
  • 编程 (14)
    • Spring (1)
  • 读书笔记 (2)
  • 运维 (5)
  • 随笔 (10)

归档

  • 2023年1月 (2)
  • 2022年8月 (1)
  • 2022年7月 (4)
  • 2022年6月 (2)
  • 2022年5月 (2)
  • 2022年4月 (3)
  • 2021年10月 (1)
  • 2021年7月 (1)
  • 2021年5月 (1)
  • 2020年11月 (1)
  • 2020年7月 (1)
  • 2020年3月 (2)
  • 2020年2月 (1)
  • 2019年1月 (1)
  • 2018年12月 (2)
  • 2018年11月 (2)
  • 2017年4月 (1)
  • 2016年11月 (1)
  • 2016年9月 (1)
  • 2016年7月 (1)
  • 2016年5月 (3)
  • 2016年4月 (2)
  • 2016年3月 (1)
  • 2016年2月 (2)
  • 2015年12月 (1)
  • 2015年11月 (2)
  • 2015年8月 (1)
  • 2015年4月 (1)
  • 2015年3月 (1)

标签

Database devops Java MySQL PostgreSQL Python shell Spring SpringBoot Spring Security 安全 年鉴 总结 编程 随笔
© 2015-2023   Geektop.net All Rights Reserved.