ER_ACCESS_DENIED_ERROR:当我尝试连接到远程服务器上的数据库-Node.js

问题描述 投票:0回答:2

当我尝试连接到远程服务器上的数据库时出现问题。

我的代码:

const mysql = require('mysql');
const database = mysql.createPool({
    host: 'localhost',
    user: 'user',
    password: 'pass',
    database: 'db'
});

database.getConnection(function (err, connection) {
    if (!err) {
        console.log('Database is connected ...');
    } else {
        console.log('Error connecting database ...');
    }
});

用于代码连接的凭据是伪造的。使用正确的凭据,我在要连接的日期数据库上成功登录了远程服务器上的phpMyAdmin。凭据很好。

当我运行脚本时,返回此错误:view error

此外,当我输入用于与本地数据库连接的凭据时,一切正常。

mysql node.js database database-connection
2个回答
0
投票

如Luuk所指出的,您需要将localhost替换为远程数据库服务器的实际IP地址和运行该数据库服务器的端口。

例如-

const database = mysql.createPool({
    host: '123.234.121.234',
    port : '3306',
    user: 'user',
    password: 'pass',
    database: 'db'
}); 

此外,请确保端口已列入白名单,并且可以通过网络进行访问。这里是一个小小的图表,用于解释。

enter image description here


0
投票

phpmyadmin与MySQL服务器在同一台计算机上运行,​​因此它可以使用通用主机名localhost连接到该服务器。

我猜,从您的问题来看,您的nodejs程序可以在其他计算机上运行(也许是您的个人计算机?)。这需要进行一些特殊用途的设置。

  1. 您必须在host:属性中使用服务器的实际主机名,而不是localhost

  2. MySQL登录凭据不仅是用户名/密码。它们是主机/用户名/密码。您可能需要创建一组新的凭据才能进行远程访问,以便您的nodejs程序可以进入。请阅读:https://webmasters.stackexchange.com/questions/2242/how-to-create-separate-users-in-phpmyadmin-each-one-cant-see-others-databases

  3. 如果您的MySQL服务器在某个云或托管服务的租用服务器上运行,则可能需要打开防火墙以允许您的计算机连接。如果您使用托管服务,请向其客户支持咨询。在云服务上,您想要打开端口3306。在其文档中查找如何执行此操作。 (这可能是一个繁琐的配置任务。)

最简单的故障排除方法是在自己的计算机上使用某些MyQSL客户端程序(例如MySQL Workbench或HeidiSQL)。当您获得连接时,可以在createPool()调用中使用相同的凭据。

© www.soinside.com 2019 - 2024. All rights reserved.