Ошибка: тайм-аут бездействия для рукопожатия в Node.js Модуль MYSQL

Я использую node-mysql и большинство запросов. За работой. некоторые запросы не работают. Я пробовал каждую версию Node (от 0.5...) до (5.6.0), я также пробовал (4.0) и (4.1), ничего не помогает.

Я пытался измениться вручную, и не получилось. Я попытался изменить файл sequence на: this._idleTimeout = -1; и не помогло.

Я прочитал вопросы и GitHub, и ничего не помогло.

Я могу попытаться исправить это самостоятельно, но мне нужно больше информации. Где тайм-аут, почему? когда? что это за тип сообщения? Откуда пришло время ожидания?

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

Ответ 1

Хорошо, время ожидания исходит из строки файла Protocol.js: 162. Если вы выберете node-mysql, вы увидите, что это переменная "timeout" для запросов. Если для тайм-аута установлено значение, намного превышающее 10000 по умолчанию, ошибка должна исчезнуть. Примером является

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
});

Вы также можете изменить время ожидания в файле Sequence.js(node_modules/mysql/lib/protocol/sequence/Sequence.js)

this._timeout  = 100000;

Ответ 2

Если вы используете сервисы Amazon, я смог решить эту проблему, изменив разрешенные IP-адреса в настройках безопасности или изменив порты открытых соединений.

Ответ 3

что вы положили на IP от Amazon? Попытка подключиться через узел и получить тайм-аут :(

Ответ 4

Для тех, кто развертывает AWS и сталкивается с этой ошибкой, вам нужно внести изменения в группу безопасности вашей базы данных/кластера и add an inbound rule, где source - это группа безопасности вашего экземпляра/ов..

Входящее правило должно выглядеть следующим образом:

Type: MySQL/Aurora
Protocol: TCP (default)
Port: 3306 (default)
Source: <security group of instance>
Description: <optional>