【问题标题】:ER_ACCESS_DENIED_ERROR: When i try to connect to the database on remote server - Node.jsER_ACCESS_DENIED_ERROR:当我尝试连接到远程服务器上的数据库时 - Node.js
【发布时间】:2023-03-13 23:21:01
【问题描述】:

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

我的代码:

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

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

【问题讨论】:

  • 你认为这条线是干什么用的:host: 'localhost'??
  • 是的,我犯了一个错误。我知道这条线是针对 localhost(本地 ip)的。在我的 createPool() 调用中,我为主机输入了远程 IP 地址。顺便说一句,我曾经连接到远程服务器(apache),连接没有问题。现在数据库已移动到另一台服务器(nginx)我遇到了连接问题。

标签: mysql node.js database database-connection


【解决方案1】:

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

例如——

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

此外,请确保端口已列入白名单并且可以通过网络访问。这里有一个小图来解释。

【讨论】:

    【解决方案2】:

    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 服务器在某个云或托管服务的租用服务器上运行,您可能需要打开防火墙以允许您的计算机连接。如果您使用托管服务,请询问他们的客户支持 krewe。在云服务上,您想打开端口 3306。在他们的文档中查找如何做到这一点。 (这可能是一项繁琐的配置任务)。

    解决此问题的最简单方法是在您自己的机器上使用一些 MyQSL 客户端程序(如 MySQL Workbench 或 HeidiSQL)。当您连接时,您可以在 createPool() 调用中使用相同的凭据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      相关资源
      最近更新 更多