zoukankan      html  css  js  c++  java
  • centos7.6下定时监测MySQL进程终止后自动重启的方法

    前言

    最近发现MySQL服务隔三差五就会挂掉,导致我的网站和爬虫都无法正常运作。自己的网站是基于MySQL,在做爬虫存取一些资料的时候也是基于MySQL,数据量一大了,MySQL它就有点受不了了,时不时会崩掉,虽然我自己有网站监控和邮件通知,但是好多时候还是需要我来手动连接我的服务器重新启动一下我的MySQL,这样简直太不友好了,所以,我就觉定自己写个脚本,定时监控它,如果发现它挂掉了就重启它。

    好了,闲言碎语不多讲,开始我们的配置之旅。

    编写Shell脚本

    首先,我们要编写一个shell脚本,脚本主要执行的逻辑如下:

    显示mysqld进程状态,如果判断进程未在运行,那么输出日志到文件,然后启动mysql服务,如果进程在运行,那么不执行任何操作,可以选择性输出监测结果。

    执行如下命令:

    cd /etc/mysql
    touch listen.sh
    vi listen.sh

     进入到vi中,我们添加如下脚本内容:

    #!/bin/bash
    pgrep mysqld &> /dev/null
    if [ $? -gt 0 ]
    then
    echo "`date` mysql is stop"
    service mysql start
    else
    echo "`date` mysql running"
    fi

    其中 pgrep mysqld 是监测mysqld服务的运行状态,&> /dev/null 是将其结果输出到空文件,也就是不保存输出信息

    $? 是拿到上一条命令的运行结果,-gt 0 是判断是否大于0,后面则是输出时间到日志文件,然后启动mysql,否则不启动mysql

    保存好了,那么我们执行如下的命令,来测试一下。

    嗯,编辑完了.sh文件之后,我们首先要对其进行授权,增加可执行的权限。

    chmod 777 monitor.sh

     然后运行脚本测试一下,显示mysql正在运行。把mysql关掉,运行脚本,便会检测到mysql已关闭,然后重新启动了mysql,再次运行,便会发现mysql正常运行了。

    修改日志输出

    好,接下来我们把输出的内容保存到日志里。修改脚本文件如下

    #!/bin/bash
    pgrep mysqld &> /dev/null
    if [ $? -gt 0 ]
    then
    echo "`date` mysql is stop" >> /var/log/mysql_listen.log
    service mysql start
    else
    echo "`date` mysql running" >> /var/log/mysql_listen.log
    fi

     这样,每执行一次脚本,输出结果都会被保存到 /var/log/mysql_listen.log 中了。

    添加定时任务

    好了,脚本可以顺利执行了,那么我们就需要定时调用一下这个脚本来运行了,我们需要用到 cron。

    首先我们需要编辑一下corn调度表格,命令如下:

    crontab -e

    如果你是第一次编辑这个,他会让你选择文件打开方式,随便选一个数字就好了。

    比如我们用GNU打开的,我们就在它的最后一行添加下面的一句话即可。

    /5代表五分钟执行一次,后面的四个点依次代表了,小时,日,月,星期。如果想要时间长一些,比如一小时调度一次,那就设置一下后面第一个*就好了。

    好,保存一下,重启cron服务。

    service cron restart

    嗯,调度任务已经添加进去了,这样,每五分钟系统就会调用一下刚才写的那个脚本。

    过一段时间,我们来看一下运行效果,嗯,监控跑的很顺利呐。

    结语

    这样,我们就实现了五分钟定时检测MySQL进程服务。

    原文引自:https://cloud.tencent.com/developer/article/1004643

  • 相关阅读:
    深度分析:SpringBoot异常捕获与封装处理,看完你学会了吗?
    去年去阿里面试,面试官居然问我Java类和对象,我是这样回答的!
    面试官:小伙子,你给我详细说一下线程的状态有哪些吧?
    新鲜出炉!JAVA线程池精华篇深度讲解,看完你还怕面试被问到吗?
    面试官:小伙子,你给我讲一下java类加载机制和内存模型吧
    深度分析:面试90%被问到的多线程、创建线程、线程状态、线程安全,一次性帮你全搞定!
    close与shutdown
    select模型(二 改进服务端)
    select模型(一 改进客户端)
    5种IO模型
  • 原文地址:https://www.cnblogs.com/tesila/p/15107545.html
Copyright © 2011-2022 走看看