Как избежать ошибок PHP при перезагрузке сервера?
Я нашел ошибку PHP в моем журнале сервера, который говорит:
[02:09:27 UTC] Неустранимая ошибка PHP: необработанное исключение "PDOException" с сообщением "SQLSTATE[HY000] [2002] Нет такого файла или каталога" в /var/www/include/db_connect.php:7
Трассировки стека:
`# 0 /var/www/include/db_connect.php(7): конструкция PDO->__ (" mysql:dbname=my... "," apache "," 123... ")
Дальнейшее изучение показывает, что эта ошибка возникает во время загрузки сервера. Журнал журнала содержит следующие соответствующие строки:
02:09:22 systemd[1]: Starting The Apache HTTP Server...
02:09:22 systemd[1]: Starting MariaDB database server...
02:09:22 systemd[1]: Starting The PHP FastCGI Process Manager...
02:09:24 systemd[1]: Started The Apache HTTP Server.
02:09:25 mysqld_safe[713]: Logging to '/var/log/mariadb/mariadb.log'.
02:09:25 mysqld_safe[713]: Starting mysqld daemon with databases from /var/lib/mysql
02:09:25 systemd[1]: Started The PHP FastCGI Process Manager.
02:09:28 NetworkManager[579]: <info> startup complete
02:09:28 systemd[1]: Started MariaDB database server.
Поскольку ошибка PHP возникает на 27-й секунде, через три секунды после запуска Apache, почему PHP жалуется, что не может найти файл? В любом случае, следует ли изменить начальную последовательность Apache, PHP-FPM и MariaDB, чтобы Apache был последним, кто начал?
1 ответ
Хотя ошибка PHP возникает через три секунды после запуска Apache, до запуска MariaDB остается всего одна секунда.
Возможно, будет полезно взглянуть на строку 7 файла PHP db_connect.php
, Я бы поспорил, что он пытается подключиться к базе данных с помощью сокета, и поскольку база данных еще не создала сокет, вы получаете No such file or directory
ошибка.
Я предполагаю, что у вас есть только один сервер, на котором выполняется все, а не пул с отдельной базой данных и веб-уровнями. Таким образом, ваш сайт не работает, пока сервер перезагружается, и первые несколько запросов также терпят неудачу, пока не появится база данных. Если вы хотите улучшить время безотказной работы, вам потребуется какой-то кластер. Если вы просто хотите предотвратить возникновение ошибки, убедитесь, что база данных работает до запуска Apache. Способ достижения этого зависит от вашего дистрибутива.