Maison  >  Article  >  base de données  >  L'erreur mysql du programme PHP mysql a disparu

L'erreur mysql du programme PHP mysql a disparu

小云云
小云云original
2018-03-14 15:49:033660parcourir


Cet article partage principalement avec vous l'erreur mysql du programme PHP résidant en mémoire. Dans l'environnement cli, le programme PHP doit fonctionner pendant une longue période et la communication. entre le client et le serveur MySQL, les connexions TCP sont instables.

Les raisons de l'instabilité peuvent être les suivantes :

  • MySQL-Server coupera automatiquement la connexion dans un certain laps de temps

  • PHP Lorsque le programme rencontre une période d'inactivité et qu'il n'y a pas de requêtes MySQL pendant une longue période, MySQL-Server coupera également la connexion pour recycler les ressources

  • Dans d'autres cas , exécutez le processus kill sur le serveur MySQL pour couper une certaine connexion, et le serveur MySQL redémarre

  • Gigue du réseau

À ce moment, la connexion MySQL dans le programme PHP échoue. Si mysql_query est toujours exécuté, une erreur MySQL server has gone away sera signalée. Si le programme ne peut pas le gérer, il rencontre directement une erreur fatale et se termine. Par conséquent, le programme PHP doit se déconnecter et se reconnecter.

Solution

mysql_ping

De nombreuses personnes ont proposé la mysql_ping solution, qui consiste à effectuer une détection de connexion ou une détection de connexion planifiée à chaque fois mysql_query.

Cette solution n'est pas la meilleure. La raison est la suivante : mysql_ping Il doit détecter activement la connexion, ce qui entraîne une consommation supplémentaire. L'exécution de mysql_ping régulièrement ne peut pas résoudre le problème. Par exemple, la connexion est fermée juste après l'exécution de la détection mysql_ping

capture le code d'erreur et se déconnecte et se reconnecte

Le principe est : mysql_query Vérifiez la valeur de retour après l'exécution. Si mysql_query ne parvient pas à revenir, le code d'erreur de détection s'avère être 2006/2013(这2个错误表示连接失败). Exécutez à nouveau mysql_connect. Après avoir exécuté mysql_connect, réexécutez mysql_query. mysql_query revient avec succès, puis la connexion est valide et il s'agit d'un appel normal.

De nombreux frameworks de processus résidents PHP bien connus

  • méthode de requête dans swoole_framework.

$res = mysql_query($sql, $this->conn);if ($res === false)
{    if (mysql_errno($this->conn) == 2006 or mysql_errno($this->conn) == 2013)
    {        $r = $this->checkConnection();        if ($r === true)
        {
            continue;
        }
    }
  • exécuter la méthode de la classe de connexion à la base de données dans Workererman.

  protected function execute($query, $parameters = "")
    {        try {            ...
        } catch (PDOException $e) {
            // 服务端断开时重连一次            if ($e->errorInfo[1] == 2006 || $e->errorInfo[1] == 2013) {
                $this->closeConnection();
                $this->connect();            ...
        }
    }

Évidemment, la capture du code d'erreur et la déconnexion et la reconnexion sont une solution très fiable et peu coûteuse. Il est recommandé à tout le monde de l'utiliser dans un environnement permanent.

thinkphp + phpworkman Une situation similaire se produira lors de l'utilisation de

TP+workman À partir de la version V5.0.6+, TP prend en charge le mécanisme de déconnexion et de reconnexion de Mysql. Il est désactivé par défaut. nécessaire, application/databases.phpAjoutez

// 开启断线重连'break_reconnect' => true,

au fichier de configuration de la base de données et tout ira bien.

Recommandations associées :

Le programme PHP résident en mémoire mysql signale une erreur

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn