17

为什么我无法连接到 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();

错误

{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect',
  fatal: true }

更新

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
4

7 回答 7

41

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

port: '/var/run/mysqld/mysqld.sock'

连接选项。

于 2014-10-20T12:42:06.843 回答
11

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

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

您可以尝试远程登录到端口 3308 吗?查看服务器是否在该端口上运行?

telnet localhost 3308

你也可以试试:

mysql -hlocalhost -uroot -pxxx
于 2014-01-18T16:54:18.820 回答
10

概述

对于其他遇到此问题并正在运行的人。我怀疑问题与网络有关,而MySQL不是Node.js.

解决方案

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

“允许网络访问MySQL”。

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

暗示

请记住,您可以通过打开并单击左侧导航面板上的端口链接来检查port您正在运行的设备。MySQLMAMP

视觉辅助

在此处输入图像描述

于 2017-02-07T04:05:17.207 回答
3

由于一些非常奇怪的原因,我的计算机只允许我将端口 3306 作为我的连接的默认端口,以便它工作。

截屏

于 2017-05-17T22:45:37.917 回答
1

我想在这里评论我的解决方案,以防万一数据库中有像我一样的新手。

我收到这个错误是因为我已经mysql正确安装了 NPM 包,但我没有在我的计算机上安装任何 MySQL 实现(我不知道我必须这样做)。

我正在使用 Arch Linux,因此,在我的项目中已经安装了 NPM 包的情况下,我这样做了pacman -Syu mariadb(MariaDB 是 Arch Linux 中 MySQL 的默认实现),然后按照指南进行配置。

然后,您可以使用root刚刚配置的用户或创建一个新用户以在您的项目中使用。对于后者:

  • 通过运行进入mysqlCLI mysql -u root -p

  • 输入root用户的密码。

  • 使用.创建一个新数据库CREATE DATABASE mydatabase;

  • 使用.创建一个新用户CREATE USER test IDENTIFIED BY "testpass";

  • 授予test用户使用新数据库的权限GRANT ALL PRIVILEGES ON mydatabase.* TO test@localhost IDENTIFIED BY "testpass";有关这方面的更多信息,请参阅。

然后,在我的项目中,我会:

let connection = mysql.createConnection({
    host: "localhost",
    user: "test",
    password: "testpass",
    database: "mydatabase"
});
于 2019-06-12T19:20:51.150 回答
0

我使用 Windows 10,并且我有 Windows 子系统 Linux (WSFL)。我可以从 WSFL 控制台执行我的项目,但是我的 MySQL 安装在 Windows 中并且它们无法连接,但是当我从 Windows 控制台执行我的项目时,它可以正常工作。

于 2021-05-05T02:43:48.070 回答
0

如果您使用 MAMP,请注意 mysql 默认 db_port 设置为 8889,因此为此我必须将其更改为 3306(或任何您的应用程序 mysql db_port 设置为)。

我的问题是节点服务器正在使用端口 3306 连接,所以它给出了下面的错误然后崩溃但 mysql 已启动并且似乎通过 localhost 建立连接,尽管我无法测试它,因为节点服务器已关闭。

errno:-61,代码:'ECONNREFUSED',系统调用:'connect',地址:'127.0.0.1',端口:3306,致命:true

一旦我将 MAMP mysql 上的端口从 8889 更改为 3306,节点服务器通过端口 3000 建立连接并给出以下语句:

服务器在 3000 端口上运行解决方案是:2

于 2021-01-26T21:29:34.073 回答