Como evitar erros do PHP durante a reinicialização do servidor?

1

Encontrei um erro de PHP no log do meu servidor que diz:

[02:09:27 UTC] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] No such file or directory' in /var/www/include/db_connect.php:7
Stack trace:
'#0 /var/www/include/db_connect.php(7): PDO->__construct('mysql:dbname=my...', 'apache', '123...')

Uma análise mais aprofundada revela que esse erro ocorre no momento em que o servidor está sendo inicializado. O diário do diário contém as seguintes linhas relevantes:

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.

Como o erro do PHP ocorre no 27º segundo, três segundos após o início do Apache, por que o PHP reclama que não foi possível encontrar o arquivo? Em qualquer caso, a seqüência inicial do Apache, do PHP-FPM e do MariaDB deve ser revertida para que o Apache seja o último a começar?

    
por Question Overflow 06.08.2014 / 16:35

1 resposta

3

Embora o erro do PHP aconteça três segundos após o arranque do Apache, ainda é um segundo antes do arranque do MariaDB.

Pode ser instrutivo ver a linha 7 do arquivo PHP db_connect.php . Eu aposto que ele está tentando se conectar ao banco de dados usando um soquete e, como o banco de dados ainda não criou o soquete, você recebe um erro No such file or directory .

Suponho que você tenha apenas um servidor aqui executando tudo, em vez de um pool com camadas de banco de dados e de web separadas. Portanto, seu site está inativo enquanto o servidor está sendo reinicializado e as primeiras solicitações também falharão até que o banco de dados seja ativado. Se você quiser melhorar seu tempo de atividade, precisará de um cluster de algum tipo. Se você quiser apenas evitar que o erro aconteça, certifique-se de que o banco de dados esteja ativo antes de iniciar o Apache. O método para conseguir isso depende da sua distro.

    
por 06.08.2014 / 16:42