Erreur générale: le serveur MySQL 2006 est parti [fermé]

8

C'est l'erreur que je reçois soudainement.

Additional uncaught exception thrown while handling exception.

Original
PDOException: SQLSTATE[70100]: Unknown error: 1317 Query execution was interrupted...my query

Additional
PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away...my query

Après avoir fait quelques recherches, cela ressemble à un module personnalisé, que j'ai fait, qui tente une requête trop volumineuse. Une solution qui semble fonctionner pour beaucoup de gens est la suivante:

  1. Ouvrez my.ini
  2. Changer "max_allowed_packet" de "1m" en "16m" (ou plus)
  3. Enregistrez my.ini et redémarrez MySQL

Cependant, je suis sur un serveur partagé, donc je ne peux pas modifier my.ini, et bien que mon fournisseur m'ait confirmé que la valeur est définie sur 1M, il ne l'augmentera pas.

J'ai également essayé d'ajouter ceci: ini_set('mysqli.reconnect', 'on');à settings.php. Cela n'a pas résolu le problème.

Quelqu'un connaît-il une autre solution ou contourne-t-il?

Merci.

dbj44
la source

Réponses:

8

Les sociétés d'hébergement mutualisé ne donnent pas le privilège SUPER . Si vous l'avez, vous pouvez facilement définir max_allowed_packet sur 512M en exécutant simplement ceci:

mysql> SET GLOBAL max_allowed_packet = 1024 * 1024 * 512;

Aucun redémarrage n'est requis. Ensuite, toutes les connexions entrantes par la suite , peuvent avoir un 512M paquet .

Tu ne peux pas faire ça:

mysql> SET max_allowed_packet = 1024 * 1024 * 512;

parce que vous obtenez

ERROR 1621 (HY000): SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value

La seule alternative à laquelle je peux penser est de passer à Amazon EC2 et d'y installer MySQL. De cette façon, vous pouvez avoir toute latitude pour modifier my.cnf / my.ini et avoir le privilège SUPER .

RolandoMySQLDBA
la source
0

J'ai demandé à mon fournisseur d'augmenter la valeur, mais ils ne l'ont pas fait. Je peux comprendre pourquoi, c'est une entreprise et ils veulent que je paie 29,99 par mois pour un serveur dédié, plutôt que 4,99 pour un serveur partagé.

Cependant, il existe une solution: identifier la requête qui est trop volumineuse et la diviser en deux ou plusieurs parties. J'ai divisé mon problème en deux: problème résolu. Inefficace - oui - mais c'est mieux que mon site ne fonctionne pas du tout ou doive payer le supplément.

dbj44
la source
Veuillez garder à l'esprit ce que j'ai dit à propos des paquets MySQL ( superuser.com/a/273833/76764 ) Les suspects habituels qui peuvent obstruer un paquet MySQL sont les grands champs TEXT / BLOB. Donc, vous voudrez peut-être penser à compresser votre TEXT/BLOB fieldscode de gréement à la place.
RolandoMySQLDBA
Oui, cela peut être le problème, mais bien que ma requête SELECT soit relativement complexe, le jeu de résultats renvoyé n'était que de quelques centaines de caractères de texte.
dbj44
2
Vous pouvez commencer à rencontrer des problèmes avec les tables de cache faisant des INSERT qui sont assez gros. Votre solution ne fonctionnera pas ici, ni à aucun autre endroit où Drupal effectue la requête.
mpdonadio
Ce n'est pas un INSERT, juste une requête SELECT avec environ 25 jointures. Tout est fait avec le générateur de requêtes. Savez-vous pourquoi cela provoquerait une telle erreur? Faire l'insertion via un gestionnaire d'envoi de formulaire n'est pas un problème.
dbj44
0

Le problème est que max_allowed_packetvous le définissez avec une valeur plus élevée.

Comment résoudre ce problème (si vous êtes dans Windows et que vous utilisez xamp, trouvez le fichier my.ini)
Allez dans xampp \ mysql \ bin
Ouvrez my.ini
Changez "max_allowed_packet" de "1m" en "16m"
Enregistrez my.ini
Maintenant redémarrez MySql via le panneau de configuration XAMPP.

J'ai trouvé cette solution ici. http://minorpoint.blogspot.com/2007/09/mysql-server-has-gone-away.html

Yuseferi
la source