【问题标题】:Can't connect to localhost database from node.js server无法从 node.js 服务器连接到 localhost 数据库
【发布时间】:2022-03-02 08:18:14
【问题描述】:

尝试连接到我的本地主机数据库时遇到了很多麻烦。我试过使用 mysqlmysql-simple 节点模块,但在这两种情况下我都无法连接。

这是我在“mysql”模块中使用的:

var mysql = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  port     : '8000',
  user     : 'uber',
  password : 'pass',
});

connection.connect(function(err) {
      if (err) throw err;

      console.log('Connection Successful');
});


connection.query('USE someDB', function(err) {
  if (err) throw err;

  console.log('Query Successful');
});

这里是我在“mysql-simple”模块中使用的:

var database = require('mysql-simple');
database.init('uber', 'pass', 'mysql', 'localhost', 8000);

database.querySingle('SELECT Host FROM user', function(err, results) {
    if (err) {
        console.log('error fetching some active users: ' + err);
        return;
    }
    log('Query Successful');
    for (var i = 0; i < results.length; i++)
        console.log('got active user ' + results[i]);
}

在这两种情况下,当我运行我的 node.js 服务器时,它都不会记录它的连接。我尝试将 localhost 替换为 '127.0.01' 并创建一个新用户以确保密码正确,但无济于事。为什么连接不上?

谢谢

【问题讨论】:

  • 你可以从命令行执行此操作吗:mysql -ppass -u uber -h localhost someDB ?
  • 检查下面的线程来解决你的问题stackoverflow.com/questions/45947577/…
  • @Nikolai 我也有同样的问题。 npm 包:mysql2。操作系统是:'debian 10' 我可以使用以下命令在命令行中访问 mysql:mysql -u root --password=´your password´。你能修好吗?

标签: mysql node.js node-mysql


【解决方案1】:

很可能网络已关闭,这意味着 mysql 服务器通过 UNIX 套接字而不是通过 TCP/IP 与客户端通信。您可以检查正在运行的 mysql 客户端并运行“状态”命令。如果你在那里看到端口号,那么你的 mysql 服务器通过 TCP/IP 进行通信,否则你会看到类似“socket pathname...”的内容,获取路径名并将其提供给 node.js 连接参数,例如

... socketPath: '/opt/lampp/var/...', ...

https://github.com/felixge/node-mysql 页面查看(搜索“socketPathname”)

希望,这是你的问题。

【讨论】:

  • 我使用socketPath : 'my/path/to/socket' 效果很好。谢谢你。
【解决方案2】:

您应该使用 mysql_config 来显示套接字的路径。
这是我 MAC 上的示例

QuyLes-MacBook-Pro:freelancer quyle$ mysql_config
Usage: /Applications/MAMP/Library/bin/mysql_config [OPTIONS]
Options:
        --cflags         [-I/Applications/MAMP/Library/include -fno-omit-frame-pointer   -g -DNDEBUG]
        --include        [-I/Applications/MAMP/Library/include]
        --libs           [-L/Applications/MAMP/Library/lib  -lmysqlclient  -lz]
        --libs_r         [-L/Applications/MAMP/Library/lib   -lmysqlclient_r  -lz]
        --plugindir      [/Applications/MAMP/Library/lib/plugin]
        --socket         [/Applications/MAMP/tmp/mysql/mysql.sock]
        --port           [0]
        --version        [5.5.42]
        --libmysqld-libs [-L/Applications/MAMP/Library/lib  -lmysqld]
        --variable=VAR   VAR is one of:
                pkgincludedir [/Applications/MAMP/Library/include]
                pkglibdir     [/Applications/MAMP/Library/lib]
                plugindir     [/Applications/MAMP/Library/lib/plugin]

然后,为 mysqlConnection 添加密钥 socketPath。
在我的样本上咆哮

MysqlServer: {
     adapter: 'sails-mysql',
     host: 'localhost',
     user: 'root', //optional
     password: 'root', //optional
     database: 'nodejs', //optional,
     socketPath: '/Applications/MAMP/tmp/mysql/mysql.sock'    
},

【讨论】:

    【解决方案3】:

    改一下

    database.init('uber', 'pass', 'mysql', 'localhost', 8000);
    

    database.init('uber', 'pass', 'mysql', 'localhost', 3306);
    

    你应该通过

    【讨论】:

    • 它现在给我这个错误:'错误:连接 ECONNREFUSED' 还有为什么端口 3306?
    • mysql默认运行在3306端口,检查UNAME/PASSWORD是否启动
    • 检查 UNAME 和密码,它们是正确的,仍然给我同样的错误 - 确保新用户
    【解决方案4】:

    确保 MySQL 和 express 在同一个端口上运行。 我从 XAMPP 捆绑了 MySQL,它在端口 3036 上运行。 在将 app.listen 设置为 3036 时,我的代码有效。终于!

    【讨论】:

      【解决方案5】:

      试试这个代码,它对我有用

      var mysql = require('mysql');
      
      var connection = mysql.createConnection(
          {
            host     : 'localhost',
            user     : 'root',
            password : '',
            database : 'urdatabase',
          }
      );
      
      connection.connect();
      
      
      query = connection.query("SELECT * FROM UrTable;");
          query
          .on('error', function(err) {
              console.log( err );
      
          })
          .on('result', function( data ) {
              socket.emit('YourData',data);
          });
      

      希望对你有帮助

      【讨论】:

      • 恐怕还是没有运气:(当我运行它时,我只是得到 { [Error: connect ECONNREFUSED] code: 'ECONNREFUSED', errno: 'ECONNREFUSED', syscall: 'connect', fatal :真}
      • 您是否运行了您的 MySQL 服务器(Wamp 或 Xampp ...)?如果是,请尝试在 mysql.conf. 中评论 skip-networking
      【解决方案6】:

      就我而言,任何事情都发生了,所以我通过为 nodejs 应用程序的新用户生成新的 GRANT 来解决

      【讨论】:

        【解决方案7】:

        这是由于在 MySQL 配置中关闭了网络。

        在 Ubuntu 20.04.2 和 MySQL 8.x.x(它在我的情况下工作)你可以在

        中找到这个设置

        /etc/systemd/system/mysql.service.d/override.conf

        会有一个 ExecStart 键并且它有多个配置。 在这里您可以将 --skip-networking 设置为 OFF

        --skip-networking=OFF
        

        你必须重启你的服务

        systemctl restart mysql.service
        

        它将允许您连接本地主机

        【讨论】:

        • 它对我不起作用,因为 /etc/systemd/system 的文件夹中没有目录 mysql.service.d/override.conf。我也在 Ubuntu 20.04.2 和 MySQL 8.0.27-0ubuntu0.20.04.1 上……我想知道 Ubuntu 20.04.2 和 MySQL 8.0.27-0ubuntu0.20.04.1 之间是否可能发生冲突……
        猜你喜欢
        • 2014-07-14
        • 2012-12-13
        • 2016-09-05
        • 2014-06-28
        • 2019-09-29
        • 2011-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多