NodeJS Mysql模块在远程数据库上引发ETIMEDOUT错误

时间:2019-01-21 09:15:50

标签: mysql node.js

美好的一天!

我正在尝试使用Node JS连接到MySQL数据库。我将使用mysql,并将其包含在我的文件中。当我运行代码时,我什么也没得到。我确实在脚本末尾通过控制台记录了连接,这为我提供了有效的连接模型。我只是似乎从来没有达到.connect内的功能,也没有查询或ping。

当我连接到本地主机(运行Wamp服务器)时,连接成功,并且检索了一些控制台日志。我尝试连接到第二个外部数据库,给我同样的错误。

我收到的错误:

ETIMEDOUT。在Connection_handleConnectTimeout。握手致命致命时,protocol.js中出现错误。 (我省略了一些文字)。

我安装了最新的mysql模块。

   var mysql = require('mysql');
    var connection = mysql.createConnection({
        host: 'MY_HOST_IP',
        database: 'MY_HOST_DB',
        user: 'MY_HOST_USR',
        password: 'MY_PW'
    });
    connection.connect(function (err) {
        console.log('conecting');
        if (err) {
            console.error('Error connecting: ' + err.stack);
        }

        console.log('Connected as id ' + connection.threadId);
    });
    connection.query('SELECT * from accounts', function (error, results, fields) {
        if (error) console.log(error);
        console.log('account ', results[0]);
    });
    connection.ping(function (error) { console.log('pingerror'); });

编辑:

以上代码在连接到两个外部托管数据库之一(使用其IP地址)时超时。这些数据库的主机说设置没有问题。 我尝试从127.0.0.1:22005连接到数据库进行连接,也许存在问题? 当我将上述代码放入一个独立的JS文件中并在命令行中与node一起运行时,它会连接。

2 个答案:

答案 0 :(得分:0)

您需要授予对所有/特定IP的所有特权,如下所示:

//下面的查询创建的用户没有密码,要设置不同的密码,请检查:http://knowmysql.blogspot.com/2013/09/mysql-grant-password-error-error-1372.html

使用''mysql_native_password创建用户'root'@'%'的身份'';

//添加特权

上授予所有特权。要'root'@'%';

答案 1 :(得分:0)

默认情况下,Node MySQL模块将连接到端口3306。如果要连接到自定义端口(例如22005),则需要通过将port: 22005添加到要传递给mysql的对象中来进行指定.createConnection()。您还应确保从网络级别运行节点实例的主机可以访问MY_HOST_IP上的该端口。