web-dev-qa-db-fra.com

PHP MySQL set Connection Timeout

Certaines publications sur la connexion MySQL ont expiré depuis PHP avec mysql.connect_timeout. Je veux savoir si le délai d'attente défini pour PHP expire juste la connexion initiale à MySQL ou s'il est valide pour une requête particulière dans la base de données?

Mon cas ici est que, j’ai une page avec une connexion à MySQL en haut, puis j’exécute 3 à 4 requêtes sur MySQL l’une après l’autre. Les 1re et 2e requêtes n'ont pris que 1 à 2 secondes pour s'exécuter, tandis que la 3 e requête prend 20 secondes. Maintenant, dans les cas où la 3ème requête prend plus de 20 secondes, je souhaite appeler un délai d’attente. La question ici est donc que, définir ce délai à partir de PHP s'applique à la connexion initiale à la base de données ou à toutes les requêtes suivantes (de manière indépendante). Si plus tard est le cas, alors comment puis-je le définir à expiration après 20 secondes pour la 3ème requête?

9
kb0000

Le paramètre connect_timeout n'est valide qu'au moment de la connexion. Il est utile de vérifier si votre serveur de base de données est accessible en 20 secondes environ. Une fois connecté, le délai d'attente spécifié n'est plus valide.

Je ne trouve aucun paramètre de délai de requête sur la page de manuel officielle de mysql: http://dev.mysql.com/doc/refman/5.5/fr/server-system-variables.html donc je ne pense pas c'est possible.

5
dAm2K

le voir: 

set_time_limit(0);   
ini_set('mysql.connect_timeout','0');   
ini_set('max_execution_time', '0');   
5
gsdfghs4f5a74a

sigalarm est votre ami. Vous pouvez définir une alarme et utiliser un gestionnaire de signal pour la détecter. 

http://php.net/manual/en/function.pcntl-alarm.php

3
Sheer

Utilisez MySQL version 5.7.4 ou supérieure et définissez la variable "max_statement_time" appropriée. La requête échouera si le délai est écoulé. 

voir http://mysqlserverteam.com/server-side-select-statement-timeouts/

2
Laurent PELE

C'est dans votre fichier de configuration php. L'emplacement de ce fichier est différent d'un système à l'autre. Sur Ubuntu et Debian, il se trouve dans /etc/php5/Apache2/php.ini

mysql.connect_timeout = 60 /* the default value is 60 seconds */
2
Kareem

Vous devez créer un processus enfant, le processus parent le supprimera si une condition n'est pas remplie dans les 20 secondes.

Ou utilisez un langage tel que node.js qui ne bloque pas le thread en cours pour une opération IO comme une requête.

0
Josh Ribakoff