【问题标题】:Starting mysql if it is not started如果没有启动就启动mysql
【发布时间】:2016-03-31 20:59:00
【问题描述】:

每天一次,我通过 cron 重新启动我的 mysql。有时,服务挂起并且无法启动。所以,我需要检查 mysql 是否正在运行(例如:服务 mysqld 状态),如果没有运行,则启动 mysqld。有人可以为此操作提供一个简单的脚本吗?

【问题讨论】:

    标签: mysql linux service centos


    【解决方案1】:

    首先创建一个 bash 脚本

    #!/bin/bash
    UP=$(service mysql status|awk '{ print $1}');
    if [ "$UP" != 'SUCCESS!' ];
    then
            echo "MySQL is down.";
            sudo service mysql start
    
    else
            echo "All is well.";
    fi
    

    第二次添加一个 crontab,每 3 分钟运行一次

    */3 * * * * /home/user/scripts/monitor.sh > /dev/null 2>&1
    

    注意:此解决方案必须根据您的发行版(服务、/etc/init.d/systemctl、mysql、mysqld)进行编辑

    原始答案(我认为应该使用 Cpanel,因为标记 cpanel 它已发布)

    Cpanel 允许您控制某些服务,并通过 chksrvd 轻松添加其他服务。 Mysql 为此你只需要配置它。

    首页 >> 服务配置 >> 服务管理器

    Alli 可以为这个监控配置 MySQL,如果他们试图通过系统解除跌倒。

    https://documentation.cpanel.net/display/CKB/TailWatch

    最好修改 /var/lib/mysql/.err generalemnte 中的 MySQL 日志

    【讨论】:

    • 我不使用cpanel,所以我需要一个简单的脚本将它添加到crontab中。
    • 我编辑我的回复。我为第一反应道歉。我为 cpanel 搜索未回答的问题,而您的问题是关于结果的。我认为这是一个 Cpanel 问题。
    【解决方案2】:

    简单回答:您可以使用单个命令并将其添加到 cron 作业中,而不是使用 bash 脚本

    * * * * * systemctl is-active --quiet mysqld || systemctl restart mysqld
    

    详细回答:

    如果 MySQL 退出,可能是您的服务器配置 (Apache | nginx) 或 MySQL 配置有问题。 DOS 攻击或系统进程可能会导致系统资源使用量激增(见图)。最终结果是 MySQL 进程被内核关闭。对于长期解决方案,应该着眼于优化您的 Apache 或 MySQL 配置。

    还有其他几个讨论 Stack Overflow 这些主题以及 MySQL 手册和 Percona 博客:

    MySQL 手册 - MySQL 如何使用内存:

    https://dev.mysql.com/doc/refman/8.0/en/memory-use.html

    Percona 服务器:使用 Percona 线程池提高可扩展性

    https://www.percona.com/blog/2014/01/28/10-mysql-performance-tuning-settings-after-installation/

    Percona - 配置最佳 MySQL 内存使用的最佳实践:

    https://www.percona.com/blog/2016/05/03/best-practices-for-configuring-optimal-mysql-memory-usage/

    如何使用 MySQLTuner 优化 MySQL 性能:

    https://www.linode.com/docs/databases/mysql/how-to-optimize-mysql-performance-using-mysqltuner/

    Apache 内存使用配置:

    https://serverfault.com/questions/254436/apache-memory-usage-optimization

    Apache 性能调优手册:

    https://httpd.apache.org/docs/2.4/misc/perf-tuning.html

    调整 Apache 服务器:

    https://www.linode.com/docs/web-servers/apache-tips-and-tricks/tuning-your-apache-server/

    但是,就您最初的问题而言,是的,您可以编写一个临时解决方案来检查 MySQL 服务是否已加载并处于活动状态,如果 MySQL 服务未加载且处于活动状态,则将重新启动它。

    您没有提及您使用的是什么操作系统。这将有助于给你一个特定的命令。我会给你一个 CentOS linux 的例子。
    查看命令systemctl status mysql 的以下输出。您可以在顶部看到该服务已加载并且活动

    [root@centos-mysql-demo ~]# systemctl status mysqld
    ● mysqld.service - MySQL Server
       Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
       Active: active (running) since Tue 2019-06-18 18:28:18 UTC; 924ms ago
         Docs: man:mysqld(8)
               http://dev.mysql.com/doc/refman/en/using-systemd.html
      Process: 3350 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
      Process: 3273 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
     Main PID: 3353 (mysqld)
       CGroup: /system.slice/mysqld.service
               └─3353 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
    
    Jun 18 18:28:11 centos-mysql-demo systemd[1]: Starting MySQL Server...
    Jun 18 18:28:18 centos-mysql-demo systemd[1]: Started MySQL Server.
    

    如果服务没有加载,那么一个命令比如:

    systemctl status mysqld || systemctl restart mysqld 
    

    将完成重新启动该过程的技巧。您可以 cron:

    * * * * * systemctl status mysqld || systemctl restart mysqld
    

    但是,如果 mysql 已加载,但服务未激活,您的 cron 将什么也不做。因此,您应该使用更详细的命令,例如:

    * * * * * systemctl is-active --quiet mysqld || systemctl restart mysqld

    这种情况下,如果服务loadedinactive比如DOS攻击可以离开你的mysql服务的状态,该命令也会重启mysql。使用--quiet 标志只是指定该命令只返回一个状态码,不向屏幕输出任何内容。如果省略--quiet 标志,您将看到activeinactive 的状态输出。

    您也可以创建一些交换空间来为您的服务器添加更多可用的 RAM 资源,尽管 Apache 和 MySQL 手册都指定您不希望这些应用程序需要交换空间。

    sudo dd if=/dev/zero of=/swapfile count=2096 bs=1MiB
    chmod 600 /swapfile
    mkswap /swapfile
    swapon /swapfile
    swapon --show
    swapon --summary
    free -h
    

    【讨论】:

    • 我添加了一些关于一般情况的详细信息,以及为什么这个答案比其他发布的答案更好。
    • 为什么要投反对票? OP 的最终目标也许应该是为他的服务器配置/带宽负载正确配置 MySQL,但我回答了他的问题。在正确配置的同时,这个方法会让你从你的数据库中退出。
    猜你喜欢
    • 1970-01-01
    • 2020-10-24
    • 2015-09-15
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 2015-04-14
    • 2020-05-11
    相关资源
    最近更新 更多