Node mysql error connect etimedout

Ожидают ответа 1 человек. Станьте первым, кто даст ответ! Или подпишитесь на вопрос, чтобы узнать ответ, когда он появится.

Всем привет, устал уже от этой ошибки может тут поможете решить? Что в нём не так?
Непосредственно ошибка

Error: connect ETIMEDOUT
    at PoolConnection.Connection._handleConnectTimeout (C:UserscrazyDesktoplarplarp-servernode_modulesmysqllibConnection.js:409:13)
    at Object.onceWrapper (events.js:420:28)
    at Socket.emit (events.js:314:20)
    at Socket._onTimeout (net.js:482:8)
    at listOnTimeout (internal/timers.js:554:17)
    at processTimers (internal/timers.js:497:7)
    --------------------
    at Protocol._enqueue (C:UserscrazyDesktoplarplarp-servernode_modulesmysqllibprotocolProtocol.js:144:48)
    at Protocol.handshake (C:UserscrazyDesktoplarplarp-servernode_modulesmysqllibprotocolProtocol.js:51:23)
    at PoolConnection.connect (C:UserscrazyDesktoplarplarp-servernode_modulesmysqllibConnection.js:116:18)
    at Pool.getConnection (C:UserscrazyDesktoplarplarp-servernode_modulesmysqllibPool.js:48:16)
    at Object.mysql.executeQuery (C:UserscrazyDesktoplarplarp-serverpackagesmodulesmysql.js:207:14)
    at init (C:UserscrazyDesktoplarplarp-serverpackagesindex.js:68:15)
    at Object.<anonymous> (C:UserscrazyDesktoplarplarp-serverpackagesindex.js:146:1)
    at Module._compile (internal/modules/cjs/loader.js:1076:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
    at Module.load (internal/modules/cjs/loader.js:941:32) {
  errorno: 'ETIMEDOUT',
  code: 'ETIMEDOUT',
  syscall: 'connect',
  fatal: true
    at processTimers (internal/timers.js:497:7)
    --------------------
    at Protocol._enqueue (C:UserscrazyDesktoplarplarp-servernode_modulesmysqllibprotocolProtocol.js:144:48)
    at Protocol.handshake (C:UserscrazyDesktoplarplarp-servernode_modulesmysqllibprotocolProtocol.js:51:23)
    at PoolConnection.connect (C:UserscrazyDesktoplarplarp-servernode_modulesmysqllibConnection.js:116:18)
    at Pool.getConnection (C:UserscrazyDesktoplarplarp-servernode_modulesmysqllibPool.js:48:16)
    at Pool.query (C:UserscrazyDesktoplarplarp-servernode_modulesmysqllibPool.js:202:8)
    at Object.mysql.executeQueryOld (C:UserscrazyDesktoplarplarp-serverpackagesmodulesmysql.js:244:14)
    at Object.mysql.executeQuery (C:UserscrazyDesktoplarplarp-serverpackagesmodulesmysql.js:198:19)
    at Object.vehicleInfo.loadAll (C:UserscrazyDesktoplarplarp-serverpackagesmodulesvehicleInfo.js:8:11)
    at init (C:UserscrazyDesktoplarplarp-serverpackagesindex.js:73:21)
    at Object.<anonymous> (C:UserscrazyDesktoplarplarp-serverpackagesindex.js:146:1) {
  errorno: 'ETIMEDOUT',
  code: 'ETIMEDOUT',
  syscall: 'connect',
  fatal: true
}

Сам код

const pool = mysql2.createPool({
    host: host,
    //socketPath: '/var/run/mysqld/mysqld.sock', //Если хочешь напрямую по сокету подключать, ускоряет немного всю хуйню
    user: dbuser,
    password: password,
    database: database,
    port: 3306,
    waitForConnections: true,
    connectionLimit: 500,
    queueLimit: 0
});

pool.on('connection', function (connection) {
    connection.query("SET SESSION `sql_mode` = ''");
    connection.query("SET GLOBAL `connect_timeout` = '31536000'");
    connection.query("SET GLOBAL `wait_timeout` = '31536000'");
    connection.query("SET GLOBAL `interactive_timeout` = '28800'");
    console.log('New MySQL connection id: ' + connection.threadId);
});

mysql.executeQuery = async function (query, values, callback) {
    const preQuery = new Date().getTime();
    try {
        if (query.indexOf('DELETE') === 0 /*|| query.indexOf('UPDATE') === 0*/ || query.indexOf('INSERT') === 0 || query.indexOf('SELECT') === 0) {
            mysql.executeQueryOld(query, values, function (err, rows, fields) {
                try {
                    if (callback)
                        callback(err, rows, fields);
                }
                catch (e) {}
            });
            return;
        }
        pool.getConnection(function (err, connection) {
            try {
                if(!err) {
                    connection.query({
                        sql: query
                    }, values, function (err, rows, fields) {
                        
                        const postQuery = new Date().getTime();
                        methods.debug(query, `Async time: ${postQuery - preQuery}ms`);
                        try {
                            if (!err) {
                                if (callback)
                                    callback(null, rows, fields);
                            } else {
                                console.log("[DATABASE ASYNC | ERROR | " + mysql.getTime() + "]", query, err);
                                if (callback)
                                    callback(err);
                            }
                        }
                        catch (e) {}
                    });
                } 
                else throw err;
                connection.release();
            }
            catch (e) {
                console.log(e);
            }
        });
    } catch (e) {
        console.log('DBERROR', e);
    }
};

Я пытаюсь работать с Node и Mysql, но я все время сталкиваюсь с ошибкой при попытке подключения к базе данных.

 //For mysql server
var mysql = require('mysql');

var connection = mysql.createConnection(
{
  host: 'example.com',
  user: 'abc',
  password: '***',
  database: 'abcd',
  port: 3306,
});
// If there is an error connecting to the database
connection.connect( function(err)
{
  if (err)
  { 
    throw err;
  }
  else 
  {
    console.log('DB connection establish');
  }
});

function check_userid(usersId)
{
var que = connection.query(
  'select * from table where id = '+usersId, function(err, result, fields){
  if(err) throw err;
  console.log('Resultset: ', result);
  console.log('Length of Resultset: ', result.length);

  if(result.length == 0)
  {
    connection.query('insert into table (id, user_status) values ( "' + usersId + '", "' + 'connected' + '")', 
                    function (err, result) 
                    {
                      if (err) throw err;
                      console.log('Updation of table: ',result.insertId);
                    });
  }
  else
  {
    connection.query('update table SET user_status="'+'connected'+'" WHERE id = "' + usersId + '"', 
                    function (err, result) 
                    {
                      if (err) throw err;
                      console.log('Updation of Table: ',result.insertId);
                    });
  }
  });

}
//For websocket
var webSocketServer = new (require('ws')).Server({port: (process.env.PORT || 5000)}),
webSockets = {} // userID: webSocket

// CONNECT /:userID
// wscat -c ws://localhost:5000/1
webSocketServer.on('connection', function (webSocket) 
{
  var userID = parseInt(webSocket.upgradeReq.url.substr(1), 10)
  webSockets[userID] = webSocket
                   console.log('connected: ' + userID + ' in ' + Object.getOwnPropertyNames(webSockets))

                   check_userid(userID);

                   // Forward Message
                   //
                   // Receive               Example
                   // [toUserID, text]      [2, "Hello, World!"]
                   //
                   // Send                  Example
                   // [fromUserID, text]    [1, "Hello, World!"]
                   webSocket.on('message', function(message) {
                                console.log('received from ' + userID + ': ' + message)
                                var messageArray = JSON.parse(message)
                                var toUserWebSocket = webSockets[messageArray[0]]
                                if (toUserWebSocket) {
                                console.log('sent to ' + messageArray[0] + ': ' + JSON.stringify(messageArray))
                                messageArray[0] = userID
                                toUserWebSocket.send(JSON.stringify(messageArray))
                                }
                                })

                   webSocket.on('close', function () {
                                delete webSockets[userID]
                                console.log('deleted: ' + userID)
                                connection.query('update table SET user_status="'+'disconnected'+'" WHERE id = "' + userID + '"', 
                    function (err, result) 
                    {
                      if (err) throw err;
                      console.log('Updation of table: ',result.insertId);
                    });
                                })
                   })

И я продолжаю получать следующую ошибку

Error: connect ETIMEDOUT
at errnoException (net.js:904:11)
at Object.afterConnect as oncomplete
--------------------
at Handshake.Sequence (/Users/apple/Desktop/js/node_modules/mysql/lib/protocol/sequences/Sequence.js:15:21)
at new Handshake (/Users/apple/Desktop/js/node_modules/mysql/lib/protocol/sequences/Handshake.js:9:12)
at Protocol.handshake (/Users/apple/Desktop/js/node_modules/mysql/lib/protocol/Protocol.js:44:50)
at Connection.connect (/Users/apple/Desktop/js/node_modules/mysql/lib/Connection.js:38:18)
at Object. (/Users/apple/Desktop/js/server.js:13:12)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)

Описание:
Я запускаю тот же сервер в локальном хосте и успешно подключаюсь к phpMyadmin, и я не получил эту ошибку, но когда я реализую этот сервер в VPS, он не может создать соединение с phpMyadmin и сказать connect ETIMEDOUT.

I am trying to connect to RDS using Lambda function, but I am getting an error:

var mysql = require('mysql');
exports.handler = function(event, context) {
           //Connect to RDS

var connection = mysql.createConnection({
host     : 'hostname',
user     : 'username',
password : 'password',
database : 'database'

});

connection.connect( function(err)
{
   if (err)
   {
     throw err;
   }
else
  {
    console.log('DB connection establish');
  }
  });

 };

The error I am getting is:

START RequestId: 9711e650-e582-11e5-af5f-97ba391a42ae Version: $LATEST

2016-03-08T23:08:06.737Z    9711e650-e582-11e5-af5f-97ba391a42ae
Error: connect ETIMEDOUT
  at Connection._handleConnectTimeout (/var/task/node_modules/mysql/lib/Connection.js:412:13)
      at Socket.g (events.js:180:16)
    at Socket.emit (events.js:92:17)
    at Socket._onTimeout (net.js:327:8)
    at _makeTimerTimeout (timers.js:429:11)
    at Timer.unrefTimeout [as ontimeout] (timers.js:493:5)
    --------------------
    at Protocol._enqueue (/var/task/node_modules/mysql/lib/protocol   /Protocol.js:141:48)
    at Protocol.handshake (/var/task/node_modules/mysql/lib/protocol    /Protocol.js:52:41)
    at Connection.connect (/var/task/node_modules/mysql     /lib/Connection.js:123:18)
    at exports.handler (/var/task/exports.js:21:12)
END RequestId: 9711e650-e582-11e5-af5f-97ba391a42ae
REPORT RequestId: 9711e650-e582-11e5-af5f-97ba391a42ae
Duration: 10988.17ms
Process exited before completing request


I had the same problem as this and just got it fixed. Seeing as this is the top search result for this problem on stackoverflow, I am going to post my solution here.

This answer is for an RDS instance inside a VPC

  1. place the Lambda function in the same VPC as your RDS instance
  2. your lambda execution role you will need to have VPC execution added to it in IAM
  3. assign a security group to the lambda function
  4. In the security attached to the RDS instance, add an inbound rule for mysql/aurora (port 3306) and rather than adding it for an IP address add it for your lambda functions security group.

In summary this places the lambda in the same VPC as RDS and gives the lambda function inbound access to MYSQL regardless of the IP of the lambda function.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Node must be provided when reporting error if location is not provided
  • Node js обработка ошибок
  • Node js логирование ошибок
  • Node js websocket error
  • Node js validation error

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии