解决node-mysql初始化错误?

时间:2015-10-13 11:46:01

标签: javascript mysql node.js node-mysql

我正在尝试使用找到here的node-mysql模块。我以前使用过这个没有任何问题但是在最近的一个项目中出现了一个奇怪的问题,它永远无法连接到数据库。我知道我的登录凭据是正确的,因为它们通过正常的 MySQL 命令行工作。

但是,当node-mysql模块尝试连接时,我将始终收到错误。这是我到目前为止的代码,启用了debugging

var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : 'password',
    database : 'Coachletic',
    pool     : { maxConnections: 50, maxIdleTime: 30},
    debug    : true
});

connection.connect(function(err){
    if(!err) {
        console.log("MySQL Database is connected.");
    } else {
        console.log(err);
        console.log("Error connecting to MySQL Database.");  
    }
});

global.connection = connection;

这是控制台的输出:

<-- HandshakeInitializationPacket
HandshakeInitializationPacket {
  protocolVersion: 10,
  serverVersion: '5.6.19-0ubuntu0.14.04.1',
  threadId: 64,
  scrambleBuff1: <Buffer 65 3f 48 2e 4d 78 38 49>,
  filler1: <Buffer 00>,
  serverCapabilities1: 63487,
  serverLanguage: 8,
  serverStatus: 2,
  serverCapabilities2: 32895,
  scrambleLength: 21,
  filler2: <Buffer 00 00 00 00 00 00 00 00 00 00>,
  scrambleBuff2: <Buffer 47 68 54 4e 6b 4e 25 6a 6a 54 46 42>,
  filler3: <Buffer 00>,
  pluginData: 'mysql_native_password',
  protocol41: true }

--> ClientAuthenticationPacket
ClientAuthenticationPacket {
  clientFlags: 455631,
  maxPacketSize: 0,
  charsetNumber: 33,
  filler: undefined,
  user: 'root',
  scrambleBuff: <Buffer 40 de 4c 94 3b c4 6f 15 0d 1c 49 12 04 46 af 64 d9 4d 41 76>,
  database: 'Coachletic',
  protocol41: true }

{ [Error: Handshake inactivity timeout]
  code: 'PROTOCOL_SEQUENCE_TIMEOUT',
  fatal: true,
  timeout: undefined }
Error connecting to MySQL Database.

尝试搜索此错误的解决方案,但没有提供任何有用的信息。

3 个答案:

答案 0 :(得分:1)

在进行了一些挖掘后,似乎这是与Node 4.2.0相关的问题。这是参考线程:https://github.com/felixge/node-mysql/issues/1236

该修复涉及将this._idleTimeout文件中的-1更改为undefined

答案 1 :(得分:0)

这是适合我的代码:

<强>初始化

var mysql = require('mysql');
var pool = mysql.createPool({
    host: 'XXX.XXX.XXX.XX',
    user: 'xxxxx_xxx',
    password: 'xxxxxxxxx',
    database: 'xxxxxxx'
});

<强>用法

pool.getConnection(function (err, connection) {
    connection.query('MY SQL QUERY', function (err, result) {
        connection.release();
    });

让我知道它是否适合你。

答案 2 :(得分:0)

问题是带有node-mysql的节点4.2.0。

要提一个快速简单的解决方案,对于那些遇到此问题并且不关心节点版本并希望快速修复的人,只需为您的机器强制执行上一个节点版本(4.1.2),以便赢得'打破。例如,对于heroku用户,可以通过添加到package.json作为主json对象的一部分来实现:  “引擎”: {     “节点”:“4.1.2”   }