В журнале сервера я обнаружил ошибку 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 -> __ construct ('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 запускался последним?
Хотя ошибка PHP возникает через три секунды после запуска Apache, до завершения запуска MariaDB остается еще одна секунда.
Было бы поучительно взглянуть на строку 7 файла PHP. db_connect.php
. Я бы поспорил, что он пытается подключиться к базе данных с помощью сокета, и поскольку база данных еще не создала сокет, вы получите No such file or directory
ошибка.
Я предполагаю, что у вас здесь только один сервер, на котором все работает, а не пул с отдельными базами данных и веб-уровнями. Таким образом, ваш веб-сайт не работает, пока сервер перезагружается, и первые несколько запросов также терпят неудачу, пока не появится база данных. Если вы хотите улучшить время безотказной работы, вам понадобится какой-то кластер. Если вы просто хотите предотвратить возникновение ошибки, перед запуском Apache убедитесь, что база данных активна. Метод достижения этого зависит от вашего дистрибутива.