7
votes

mysql_pconnect (): Envoyer de 5 octets a échoué avec errno = 32 tuyau cassé

J'utilise la même bibliothèque d'abstraction de DB pendant des années. Mais aujourd'hui, il a commencé à écrire ces messages (8) dans mon journal.

L'application fonctionne correctement mais chaque fois qu'un script se connecte à la DB le même avis est enregistré.

Je ne peux pas penser à ce que ce soit ont changé. Cela se passe sur ma machine de développement locale. xxx


6 commentaires

Avez-vous essayé de vous connecter via Utilitaire de ligne de commande?


Y a-t-il quelque chose de similaire / lié dans le journal mysqld également?


Je n'ai aucun problème à utiliser le client CLI MySQL. Et comme je l'ai dit, MySQLND se connecte et la connexion fonctionne, mais elle jette cet avis ob chaque pconnect () maintenant.


Rien noté dans le journal des erreurs MySQLD. J'ai des avertissements-warnings


Oh, quelle ennuis! J'ai redémarré Apache (j'utilise APXS2 SAPI) et maintenant les messages d'erreur sont arrêtés. Ce ne sera pas facile de trouver ce qui leur causait maintenant.


Si les erreurs se produiront à nouveau maintenant que vous avez redémarré l'Apache, mes paris sont sur les délais d'attente et mysqlnd (pas aussi) reconnecter silencieusement.


5 Réponses :


0
votes

Ce peut être parce que vos données contiennent des caractères «UTF-8». J'ai eu le problème similaire est causé par celui-ci.

Exception: mysql_query (): Envoyer de 1462592 octets a échoué avec errno = 32 tuyau cassé

i utilisé xxx

pour importer le fichier SQL contient beaucoup de caractères UTF8 (langue thaïlandaise), mais je n'ai pas défini par défaut = utf8 pour [mysql]. Donc, les mauvaises données codées dans la base de données ont provoqué ce problème.


1 commentaires

Cela peut arriver même si vous avez tout défini sur UTF-8. Cela inclut l'utilisation de UTF8MB4. J'utilise MySQL 5.6 avec PHP 5.6.20 et j'ai toujours eu la question. Je me souviens que cela a commencé lorsque j'ai essayé de mettre en œuvre des connexions persistantes.



13
votes

Si quelqu'un est en difficulté avec ce problème, voici le correctif:

Essayez de modifier / configurer wait_timeout dans votre mySQL my.cnf fichier de configuration: xxx

Ce fichier de configuration est situé dans le /etc/mysql/my.cnf (ubuntu / debian) et / usr / local / mysql /my.cnf (OSX).

redémarrez le serveur MySQL et il devrait fonctionner.


0 commentaires

-1
votes

Il suffit de supprimer mysqlnd pilote et utilisez mysqli Oui mysqlnd plus moderne, mais qu'en est-il de la stabilité? Les commandes suivantes corrigent votre problème

apt-get supprimer php5-mysqlnd

apt-get Installer PHP5-PDO-MYSQL


1 commentaires

Je suis désolé, mais vous ne savez pas de quoi vous parlez. MySQLND est une extension PHP pouvant être utilisée par le MySQL _ * () , MYSQLI et PDO API comme alternative à la liaison dans libmysqlclient.so, qui permet une meilleure efficacité de la mémoire lors de la récupération des lignes et des gains de vitesse potentiels en raison d'un couplage plus serré. MySQLND ne semble pas exposer aux API au code PHP, seules d'autres extensions.



3
votes

Seule solution que j'ai trouvée jusqu'à présent, changez

// From
PDO::ATTR_PERSISTENT => true
// To
PDO::ATTR_PERSISTENT => false


1 commentaires

J'ai remarqué que cela a commencé à arriver lorsque j'ai essayé d'utiliser également des connexions persistantes. Peut-être que je manque quelque chose.



2
votes

J'utilise PHP 5.6.20, PDO (Exceptions de lancement uniquement) et MySQL 5.6.28 avec des connexions persistantes et tout est UTF8MB4. Toute ma pile est configurée pour UTF-8 (paramètres de chaîne DSN, connexions, bases de données de serveur de base de données, tables, colonnes, Apache 2.4.12, PHP, toutes les pages Web, CSS ... vous le nommez).

Je reçois le Suite à un message d'erreur par intermittence et il est mystifiant et ennuyeux.

AVIS: PDO :: __ Construction (): Envoyer de 5 octets a échoué avec errno = 32 tuyau cassé dans le fichier / FOO / BAR / BAR / BAR / BAR / BAR / BAR / BAR / BAR / BAR / BAR / BAR / BAR / em>

en supposant une connexion persistante est un noninteractif One, le manuel MySQL 5.6 (5.1.4 Variables du système serveur) indique ce qui suit sur le Variable du système de serveur wait_timeout .

Le nombre de secondes que le serveur attend l'activité sur un Connexion non interactive avant de la clôtrer.

défaut: 28800 sec

(28000 sec / 1) * (1 heure / 3600 secondes) = 8 heures

MAX : 31536000 sec xxx

par conséquent, cochez wait_timeout dans votre my.cnf et décidez si des connexions persistantes sont ce dont vous avez besoin . En outre, vous devrez investir pour rendre votre application plus robuste pour rendre compte d'une connexion persistante qui a été déchirée. Clairement, vous ne voulez pas que votre client revenait le lendemain (après avoir disparu. à la maison pour la nuit) et dites "Qu'est-ce que le diable ?!"


0 commentaires