web-dev-qa-db-fra.com

Erreur: délai d'inactivité de la prise de contact dans le module Node.js MYSQL

J'utilise node-mysql et la plupart des requêtes. Travail. certaines requêtes ne fonctionnent pas. J'ai essayé toutes les versions de Node (de 0,5 ...) jusqu'à (5.6.0), j'ai également essayé (4.0) et (4.1), rien n'y fait.

J'ai essayé de changer maually, et ça n'a pas marché. J'ai essayé de changer le fichier sequence en: this._idleTimeout = -1; et n'a pas aidé.

J'ai lu les numéros et GitHub, et rien n'y fait.

Je peux essayer de le réparer moi-même, mais j'ai besoin de plus d'informations. Où est le délai d'attente, pourquoi? quand? quel est ce type de message? D'où vient le délai d'attente?

MYSQL_ERROR     { [Error: Handshake inactivity timeout]  
code: 'PROTOCOL_SEQUENCE_TIMEOUT',   fatal: true,   
timeout: 10000 }  
18
Aminadav Glickshtein

Ok, le délai d'attente provient de la ligne de fichier Protocol.js: 162. Si vous extrayez node-mysql, vous verrez qu'il s'agit d'une variable "timeout" pour les requêtes. Si vous définissez le délai d'expiration sur quelque chose de bien supérieur à 10000, la valeur par défaut, l'erreur devrait disparaître. Un exemple est

pool = require('mysql').createPool({
    connectionLimit : 1000,
    connectTimeout  : 60 * 60 * 1000,
    acquireTimeout  : 60 * 60 * 1000,
    timeout         : 60 * 60 * 1000,
    Host            : process.env.DB_Host,
    user            : process.env.DB_USERNAME,
    password        : process.env.DB_PASSWORD,
    database        : process.env.DB_DATABASE
});

Vous pouvez également modifier le délai d'expiration dans le fichier Sequence.js (node_modules/mysql/lib/protocol/sequence/Sequence.js)

this._timeout  = 100000;
20
Nick Kotenberg

Si vous utilisez les services d'Amazon, j'ai pu résoudre ce problème en modifiant les adresses IP autorisées dans les paramètres de sécurité o en modifiant les ports de connexion ouverts.

1
Berkay Torun