node.js mysql错误:ECONNREFUSED

cla*_*rkk 13 mysql node.js

为什么我不能连接到mysql服务器?

在同一台服务器上运行Apache/PHP服务器,它连接没有问题!?

var mysql_link = {
    host : 'localhost',
    port : 3308,
    database: 'nodetest',
    user : 'root',
    password : 'xxx'
};

var connection = mysql.createConnection(mysql_link);

connection.connect(function(err){
    console.log(err);
    if(err != null){
        response.write('Error connecting to mysql:' + err+'\n');
    }
});

connection.end();
Run Code Online (Sandbox Code Playgroud)

错误

{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect',
  fatal: true }
Run Code Online (Sandbox Code Playgroud)

更新

root@dyntest-amd-6000-8gb /var/www/node/dyntest # ps ax | grep mysqld
 7928 pts/0    S+     0:00 grep mysqld
28942 ?        S      0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/run/mysqld/mysqld.pid
29800 ?        Sl    17:31 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/var/lib/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/lib/mysql/mysql-error.log --open-files-limit=65535 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
Run Code Online (Sandbox Code Playgroud)

Vic*_*don 32

我知道这个问题已经得到解答,但对我来说问题是mysql服务器监听的是不在tcp套接字上的Unix套接字.所以解决方案是添加:

port: '/var/run/mysqld/mysqld.sock'
Run Code Online (Sandbox Code Playgroud)

连接选项.

  • 对于osx MAMP,端口是/Applications/MAMP/tmp/mysql/mysql.sock (5认同)
  • 只是为未来的读者插话:这解决了通过节点连接到 Angstrom Distribution 上的 mysql 的问题(至少对我来说在 BeagleBoneBlack 上是这样),路径实际上是 `/tmp/mysql.sock` (2认同)

小智 9

M1 MacBook Pro 上的 Mac 操作系统,通过brew 安装 MySQL:

将主机从“localhost”更改为“127.0.0.1”并使用密码创建不同的用户解决了我的这个问题。由于某种原因,我无法使用 root 用户且没有密码连接到我的数据库。我在 MySQL Workbench 上创建了新用户,但您也可以通过 mysql CLI 创建具有管理员权限的新用户。只需谷歌一下即可。

这就是我的后端的样子:

const express = require('express');
const mysql = require('mysql');
const app = express();
const port = 3500;

const db = mysql.createConnection({
    host: '127.0.0.1',
    user: 'admin',
    password: 'admin',
});
db.connect((err) => {
    if (err) throw err;
    console.log('connected to database');
});

app.listen(port, () => {
    console.log('server listening on port 3500');
});
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我只需要用“127.0.0.1”或“0.0.0.0”替换“localhost”即可使其工作。 (4认同)

wun*_*uno 8

概观

对于其他任何有此问题并正在运行.我怀疑这个问题与网络有关,而不是MySQLNode.js.

如果您打开MAMP并单击MySQL左侧导航面板,它将打开MySQL选项页面.在页面中央,您会看到一个复选框,上面写着:

"允许网络访问MySQL".

选中此框,然后重新启动MAMP.此时,您现在可以telnet使用node.js脚本或脚本测试与MySQL的连接.

暗示

请记住,您可以通过打开并单击左侧导航面板上的ports链接来检查portMySQL的运行状况MAMP.

视觉辅助

在此输入图像描述


Pez*_*kow 7

如果这之前有用,我的第一个猜测是你已经获得了在后台运行的node.js脚本的副本,该脚本正在保持连接.

我认为连接被拒绝是一个tcp/ip错误消息,而不是来自MySQL的东西,这表明它没有运行或正在另一个端口或套接字上运行.

你能试试telnet到3308端口吗?要查看服务器是否在该端口上运行?

telnet localhost 3308
Run Code Online (Sandbox Code Playgroud)

你也可以尝试:

mysql -hlocalhost -uroot -pxxx
Run Code Online (Sandbox Code Playgroud)