2
respostas

Sistema PHP não volta a funcionar automaticamente após reiniciar o banco de dados

Olá pessoal,

Ao reiniciar o banco de dados e tentar rodar meu sistema .php ele não volta a funcionar automaticamente, eu sou obrigado a reiniciar o apache (xampp) só assim ele volta a funcionar novamente. Como o servidor (hardware) de aplicação é separado do servidor (hardware) de banco e estão ligados em rede pode haver falha de comunicação e perder a conexão entre ambos em dado momento.

Minha pergunta é como faço para restabelecer a minha conexão entre aplicação e banco depois de uma falha/queda de conexão/reiniciar servidor de banco etc?

Complemento: já trabalho há um tempo com java e sempre utilizei o pool de conexão em uma arquivo de configuração dentro do sistema onde você pode definir

1) o máximo de conexões ativas entre o sistema e banco

2) o minimo de conexões ativas entre o sistema e banco

3) é possível definir um tempo onde a aplicação verifica se tem conexão ativa com o BD se não tiver ele cria automaticamente a quantidade mínima de conexões.

Com isso é possível reconectar o sistema com o banco sempre que comunicação entre os mesmos for perdida.

Eu acredito que tem algo parecido em php, mas não sei se é configurado na aplicação ou no servidor de aplicação apache

att.

2 respostas

Oi Hermogenes, tudo bom?

Você não precisa gerenciar isto no PHP, pois se usa PDO::ATTR_PERSISTENT como true o PDO/PHP irá reaproveitar as conexões.

Se seu apache está configurado para trabalhar com 10 threads, no seu banco de dados existirão 10 conexões. Se você acompanhar a vida destas conexões, verá que elas durarão o mesmo tempo que cada thread do webserver =)

Ou seja, o gerenciamento do Pool de Connections aqui em php pode ser feito pelo proprio apache.

Claro que este framework que usamos no curso também não é nada robusto, afinal foi desenvolvido por mim para facilitar a explicação sem que o aluno precisasse de pre-requisitos com algum framework.

Mas, frameworks mais robustos como Laravel e symfony possuem formas mais elegantes de lidar com isso. Aqui na alura a gente tem 2 cursos de Laravel, caso te interesse =)

Qualquer duvida, compartilha aqui com a gente!

Abraço.

Olá André vou fazer um teste, mas de ante mão adianto outras duvidas rsrs...

Além do PDO há outras aplicações utilizando o pconect() do mssqlserver, para esses casos qual seria a sugestão para manter a conexão sempre ativa?

Fazendo uma analogia ao pool de conexão que eu conheço em java, ele faz exatamente que vc informou acima com um detalhe a mais. Exemplo caso o servidor de banco parar e voltar funcionar novamente a aplicação volta a estabelecer conexão pois de tempo em tempo ela envia um comando ao servidor para checar se tem conexão, caso não haja ele cria o minimo de conexão no caso que você citou acima seriam 10.

Em java utilizou uma configuração do tipo:

até onde eu sei esse que está na aplicação sobrescreve a configuração padrão do tomcat

Obrigado pela ajuda parceiro.