【问题标题】:PHP script to Check MYSQL Running or not?PHP脚本检查MYSQL是否运行?
【发布时间】:2015-09-04 04:05:09
【问题描述】:

我正在寻找一个 PHP 脚本,它可以检查CENTOS / Linux VPS 中的 mysql 是否正在运行?

我尝试了几种方法,但都不起作用

第一种方法:

<?
$command = ('/etc/init.d/mysql restart');
if (! $dbh = mysql_connect('localhost','username','password') ){
$output = shell_exec($command);
echo "<pre>$output</pre>";
}
else
    echo"nothing happened";    
?>

第二种方法:

<?php
// STOP + START = RESTART..

system('net stop "MySQL"'); /* STOP */
system('net start "MySQL"'); /* START */
?>

这两种方法在 PHP 中都不适合我..

问题是:这些天我的网站有太多的 mysql 负载,我尝试了几种方法,但我无法阻止它崩溃。 因此我决定制作一个 PHP 脚本来检查天气 mysql 是否正在运行? 如果没有,那么 PHP 脚本将执行 Restart Mysql, 或者打印“My Sql 正在运行”。 为此,我决定在 PHP 中设置一个 Cron Job,该 PHP 脚本将监视 mysql 是否正在运行。 我也在寻找最后保存日志..检查mysql重启了多少次..... 请有人找到此问题的修复程序..并在此处发布.. 提前谢谢...

【问题讨论】:

  • 为了爱每一个连接到互联网的设备,不要将 PHP 配置为可以执行 shell 命令或外部程序。
  • Mysql负载分析可以使用Mysql慢查询日志dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
  • @GaneshGhalame 请注意,如果 MySQL 是问题所在,myself_safe 只会成功重新启动 mysqld - 通常不是。如果由于内存不足的 Web 服务器消耗了所有可用资源而导致 MySQL 服务器被系统杀死,mysqld_safe 将立即发现并重新启动 mysqld 如果可能,但如果内存持续不足,它会正确放弃,假设某些事情更严重。如果 Apache 在同一台机器上,问题通常是这样的:dba.stackexchange.com/questions/25077/…
  • @Michael-sqlbot 感谢您的澄清

标签: php mysql restart


【解决方案1】:

您可以通过简单的 bash 脚本来实现。每 5 分钟或根据您的要求在 cron 中安排以下脚本。

#!/bin/bash
EMAILID=yourmail@domain.com

date > /var/log/server_check.log

mysql -uroot -proot123 -e"SELECT USER FROM mysql.user LIMIT 1" >> /var/log/server_check.log 2>&1
if [ $? -eq 0 ]
    then
        echo -e "Hi,\\n\\nMy DB is running \\nThanks,\\nDatabase Admin" | mail -s "My DB is running" $EMAILID
        exit
else

        echo -e "Hi,\\n\\nMy DB is not running, so now starting it.\\nThanks,\\nDatabase Admin" | mail -s "My DB is not running" $EMAILID
                service mysqld start

fi

此外,这只是一个检查,但不是解决方案,您应该检查慢日志中的查询或您的数据库配置,以了解其根本原因并进行处理。

【讨论】:

  • 请检查其他条件,如果它没有运行,它将重新启动。
  • 正如我在回答中提到的那样,这不是解决方案,对于解决方案,您必须找到它的根本原因......
【解决方案2】:

首先,允许 MySQL 执行 shell 命令或可执行程序会招致安全灾难。

其次,如果您的网站因 MySQL 负载过大而挂起,那么从 PHP 重新启动 MySQL 会招致数据丢失灾难。花一些时间调整数据库的性能。网上有很多这方面的资料。

您可以配置您的服务器(假设您控制服务器并且不使用虚拟主机)以允许只读 (!) 访问在 MySQL 运行时存在的 .pid 文件,如@user1420752 所建议的那样。您可以检查它是否存在以查看 MySQL 是否正在运行。但是,这并不能确保它完全响应。

或者,您可以运行几乎所有 MySQL 查询中最便宜的查询

SELECT 1

它只会在 MySQL 启动时运行,但不需要任何 IO 来完成 (see this)。

有很多针对操作系统(Windows/Linux)和您的数据库的监控解决方案。一些好的是开源的。我建议设置一个以在 CPU 或 IO 使用率高或 MySQL 服务器停止时通知您,并将您的精力集中在 MySQL 调优上。

【讨论】:

    【解决方案3】:

    如果您的 mysql 服务被阻塞或停止运行,请使用以下 shell 脚本自动启动您的 MySql 服务。

    #!/bin/bash
    now=$(date +"%T")
    echo "in $(pgrep mysqld | wc -l)  auto mysql start $now"
    if [[ $(pgrep mysqld | wc -l) == 0 ]];
    then
        sudo -i | /etc/init.d/mysqld start
    fi
    

    在 Cron 作业中设置 Shell 脚本:

    */2 * * * * /bin/sh /home/auto_start_mysql.sh >> /home/cronlog.txt
    

    更多详情请查看此网址:http://www.easycodingclub.com/check-mysql-running-or-not-using-shell-script-or-php-script/linux-centos/

    【讨论】:

      【解决方案4】:

      取决于平台/版本,但如何:

      $mysqlIsRunning = file_exists("/var/run/mariadb/mariadb.pid");
      

      【讨论】:

      • mariadb.pid 可能是 MySQL 的 MariaDB 分支特有的......而且我会非常犹豫配置我的服务器以允许 PHP 访问 /var/run。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2012-11-14
      • 2019-03-10
      • 2010-10-21
      相关资源
      最近更新 更多