我正在寻找一个可以检查CENTOS / Linux VPS
中是否正在运行mysql的PHP脚本?
我尝试了几种方法,但它不起作用
第一种方法:
<?
$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, 或者打印“我的Sql正在运行”。 为此,我决定用PHP设置一个Cron Job,PHP脚本将监视mysql是否正在运行。 我也想在最后保存日志..来检查mysql重启多少次..... 请有人找到这个问题的解决方案..并在这里发布.. 提前谢谢......
答案 0 :(得分:2)
您可以通过简单的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
此外,这只是一个检查但不是解决方案,您应该在慢速日志或数据库配置中检查您的查询以获取它的根本原因并对其进行处理。
答案 1 :(得分:2)
首先,允许MySQL执行shell命令或可执行程序会引发安全灾难。
其次,如果你的网站由于MySQL负载太大而挂起,那么从PHP重启MySQL会引发数据丢失灾难。花一些时间来调整数据库的性能。在互联网上有相关的信息。
您可以配置您的服务器(假设您控制服务器而不使用虚拟主机),以允许对MySQL运行时出现的.pid文件进行只读(!)访问,如@ user1420752所示。您可以检查它是否存在以查看MySQL是否正在运行。但这并不能确保它完全响应。
或者,您可以运行所有MySQL查询中最便宜的
SELECT 1
它只会在MySQL启动时运行,但不需要任何IO来完成(see this)。
有很多操作系统(Windows / Linux)和数据库的监控解决方案。一些好的是开源的。我建议设置一个,以便在CPU或IO利用率很高时通知您,或者MySQL服务器停止时,并将精力集中在MySQL调优上。
答案 2 :(得分:1)
如果您的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/
答案 3 :(得分:0)
依赖于平台/版本,但如何:
$mysqlIsRunning = file_exists("/var/run/mariadb/mariadb.pid");