2015-09-04 1 views
2

Я ищу PHP-скрипт, который может проверить, работает ли mysql или нет в CENTOS/Linux VPS?PHP-скрипт для проверки 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 */ 
?> 

Оба метода DINT не работает для меня в PHP ..

Проблема заключается в том, что в наши дни у моего сайта слишком много нагрузки mysql, я попробовал несколько встречных но я не могу остановить его сбой. поэтому я решил сделать PHP-скрипт для проверки погоды mysql запущен или нет? Если нет, то PHP-скрипт выполнит перезагрузку Mysql, или еще напечатает «My Sql is running». Для этого я решил установить Cron Job в PHP, что скрипт PHP будет контролировать mysql или работает. Я также ищу, чтобы сохранить журналы в конце .., чтобы проверить, сколько раз mysql получил перезагрузку ..... , пожалуйста, кто-нибудь найдет исправление этой проблемы .. и отправьте сюда .. спасибо заранее ...

+0

Посмотрите на HTTP ([Restart MySQL внутри PHP браузера, разрешения вопроса?]: //stackoverflow.com/questions/10588636/restart-mysql-within-php-browser-permissions-issue) и [sudo в php exec()] (http://stackoverflow.com/questions/3173201/sudo-in- php-exec) –

+2

Для любви к каждому устройству, подключенному к Интернету, не настраивайте PHP так, чтобы он мог запускать оболочку команд или внешних программ. –

+0

Для анализа нагрузки Mysql вы можете использовать Mysql Slow Query Log https://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html –

ответ

1

Вы можете достичь этого путем простого Баш скрипт. Расписание ниже сценария в cron каждые 5 минут или согласно вашему требованию.

#!/bin/bash 
[email protected] 

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 

Далее это только проверка, но не решение, вы должны проверить ваши запросы в slowlogs или конфигурации БД, чтобы получить основную причину этого и работать на нем.

+0

Plz check else Условие перезапустится, если оно не запущено. –

+1

также, как я упомянул в своем ответе, что это не решение, для решения вы должны получить основную причину этого .... –

0

Платформа/зависит от версии, но как насчет:

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

mariadb.pid is предположительно специфичный для ветви MariaDB MySQL ... Также я был бы очень неспособен настроить мой сервер, чтобы дать PHP доступ к/var/run. –

2

Прежде всего, позволяя MySQL выполнять команды оболочки или исполняемые программы, вызывает угрозу безопасности.

Во-вторых, если ваш сайт висит из-за слишком большой нагрузки в MySQL, перезапуск MySQL с PHP вызывает катастрофу с потерей данных. Проведите некоторое время, настроив вашу базу данных. В интернете есть довольно много информации об этом.

Вы можете настроить свой сервер (предполагая, что вы управляете сервером и не используете виртуальный хостинг), чтобы разрешить доступ только для чтения (!) К файлу .pid, который присутствует во время работы MySQL, как было предложено пользователем @ user1420752. Вы можете проверить, существует ли он, чтобы проверить, работает ли MySQL. Тем не менее, это не гарантирует, что оно вообще реагирует.

В качестве альтернативы, вы можете запустить только о самом дешевом все MySQL запросов

SELECT 1 

это будет работать, только если MySQL вверх, но не требует какого-либо операций ввода-вывода для завершения (see this).

Существует множество решений для мониторинга операционных систем (Windows/Linux) и вашей базы данных. Некоторые хорошие - с открытым исходным кодом. Я бы предложил установить один из них, чтобы уведомить вас, когда загрузка процессора или IO высока, или если сервер MySQL остановлен, и сосредоточьте свои усилия на настройке MySQL.

1

Если ваша служба mysql заблокирована или остановлена, используйте следующий сценарий оболочки, чтобы автоматически запустить службу 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 

Set Shell скрипт хрон:

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

Более подробно проверить этот URL: http://www.easycodingclub.com/check-mysql-running-or-not-using-shell-script-or-php-script/linux-centos/

Смежные вопросы