在npm / mysql中连接到Azure数据库for MySQL

时间:2017-06-13 07:25:35

标签: mysql node.js azure azure-database-mysql

使用mysql npm模块(版本2.13.0)连接到Azure Database for MySQL时出错:

错误:

/Users/sascha/Desktop/azure-mysql/index.js:19
    if (error) throw error;
            ^
Error: ER_HANDSHAKE_ERROR: Bad handshake
    at Handshake.Sequence._packetToError (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/sequences/Sequence.js:52:14)
    at Handshake.ErrorPacket (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/sequences/Handshake.js:103:18)
    at Protocol._parsePacket (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/Protocol.js:280:23)
    at Parser.write (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/Parser.js:75:12)
    at Protocol.write (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/Protocol.js:39:16)
    at TLSSocket.ondata (_stream_readable.js:528:20)
    at emitOne (events.js:77:13)
    at TLSSocket.emit (events.js:169:7)
    at readableAddChunk (_stream_readable.js:146:16)
    at TLSSocket.Readable.push (_stream_readable.js:110:10)
    --------------------
    at Protocol._enqueue (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/Protocol.js:141:48)
    at Protocol.handshake (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/protocol/Protocol.js:52:41)
    at Connection.connect (/Users/sascha/Desktop/azure-mysql/node_modules/mysql/lib/Connection.js:130:18)
    at Object.<anonymous> (/Users/sascha/Desktop/azure-mysql/index.js:16:12)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Module.runMain [as _onTimeout] (module.js:467:10)
    at Timer.listOnTimeout (timers.js:92:15)

代码:

var mysql = require("mysql");
var fs = require("fs");

var connection = mysql.createConnection({
    host: "host",
    user: "user@db",
    password: "pw",
    database: "scheme",
    port: 3306,
    ssl: {
        ca: fs.readFileSync(__dirname + "/cert.pem")
    },
    insecureAuth: true
});

connection.connect();

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
    if (error) throw error;
    console.log('The solution is: ', results[0].solution);
});

connection.end();

通过MySQL Workbench连接到数据库工作正常。

1 个答案:

答案 0 :(得分:4)

这是一个众所周知的问题,因为我们的工程师在https://social.msdn.microsoft.com/Forums/en-US/c8fedbcc-909d-41ce-8c72-0374f76fdf82/cannot-connect-from-nodejs?forum=AzureDatabaseforMySQL处有一个讨论。

目前,我已经测试了@Bradley Grainger在Cannot connect Azure Web App - NodeJS to Azure Mysql提供的解决方案。我们也可以在https://github.com/mysqljs/mysql/commit/e3e123e9af7c0829a6c1417d911572a75b4a5f95找到要点。

目前,请将package.json修改为:

"dependencies": {
    "mysql": "git://github.com/mysqljs/mysql#e3e123e9af7c0829a6c1417d911572a75b4a5f95"
  },

然后,运行npm install来安装此版本。

它应该按预期工作。

此外,请等待维护者合并此PR。