Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql ER_ACCESS_DENIED_错误:当我尝试连接到远程服务器上的数据库时-Node.js_Mysql_Node.js_Database_Database Connection - Fatal编程技术网

Mysql ER_ACCESS_DENIED_错误:当我尝试连接到远程服务器上的数据库时-Node.js

Mysql ER_ACCESS_DENIED_错误:当我尝试连接到远程服务器上的数据库时-Node.js,mysql,node.js,database,database-connection,Mysql,Node.js,Database,Database Connection,尝试连接到远程服务器上的数据库时出现问题 我的代码: const mysql = require('mysql'); const database = mysql.createPool({ host: 'localhost', user: 'user', password: 'pass', database: 'db' }); database.getConnection(function (err, connection) { if (!err) {

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

我的代码:

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,登录到我要连接的数据库上。证书很好

运行脚本时,返回以下错误:


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

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

例如—

const database = mysql.createPool({
    host: '123.234.121.234',
    port : '3306',
    user: 'user',
    password: 'pass',
    database: 'db'
}); 
此外,请确保该端口已列入白名单,并且可以通过网络访问。这里有一个小小的图表来解释


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

我猜,从你的问题来看,你的nodejs程序运行在其他机器上(可能是你的个人机器?)。这需要一些特殊用途的设置来完成

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

  • MySQL登录凭据不仅仅是用户名/密码。它们是主机/用户名/密码。您可能需要为远程访问创建一组新的凭据,以便您的nodejs程序可以进入。请阅读以下内容:

  • 如果您的MySQL服务器在某个云或托管服务的租用服务器上运行,您可能需要打开防火墙以允许您的机器连接。如果您使用的是托管服务,请咨询他们的客户支持krewe。在云服务上,您希望打开端口3306。在他们的文档中查找如何做到这一点。(这可能是一项繁重的配置任务)


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

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