Nodejs node-msql 需要指定socketPath才能连接成功?

Nodejs node-msql 需要指定socketPath才能连接成功?

如题,求大神解释。。。。。不指定socketPath就报如下错误:

Error: connect ECONNREFUSED at errnoException (net.js:901:11) at Object.afterConnect [as oncomplete] (net.js:892:19)

at Handshake.Sequence (/home/swj/workspace/backbonedemo/node_modules/mysql/lib/protocol/sequences/Sequence.js:15:20) at new Handshake (/home/swj/workspace/backbonedemo/node_modules/mysql/lib/protocol/sequences/Handshake.js:9:12) at Protocol.handshake (/home/swj/workspace/backbonedemo/node_modules/mysql/lib/protocol/Protocol.js:42:50) at Connection.connect (/home/swj/workspace/backbonedemo/node_modules/mysql/lib/Connection.js:73:18) at Object.<anonymous> (/home/swj/workspace/backbonedemo/routes/index.js:16:12) at Module._compile (module.js:456:26) at Object.Module._extensions…js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17)


2 回复

Nodejs node-mysql 需要指定socketPath才能连接成功?

在使用 node-mysql 连接 MySQL 数据库时,如果遇到 ECONNREFUSED 错误,通常是因为没有正确配置数据库的连接信息。特别是当你使用的是基于 Unix 套接字(Unix socket)连接而不是 TCP/IP 连接时,需要指定 socketPath 参数。

问题背景

如果你的 MySQL 服务器配置为通过 Unix 套接字(例如 /tmp/mysql.sock/var/run/mysqld/mysqld.sock)进行通信,那么你需要在连接配置中指定 socketPath。否则,默认情况下 node-mysql 会尝试通过 TCP/IP 进行连接,这可能会导致连接被拒绝。

示例代码

const mysql = require('mysql');

// 创建连接配置对象
const connection = mysql.createConnection({
    host: 'localhost', // MySQL 主机地址
    user: 'your_username', // 用户名
    password: 'your_password', // 密码
    database: 'your_database', // 数据库名称
    socketPath: '/var/run/mysqld/mysqld.sock' // Unix 套接字路径
});

// 连接到 MySQL 数据库
connection.connect((err) => {
    if (err) {
        console.error('Error connecting to MySQL:', err.stack);
        return;
    }
    console.log('Connected to MySQL as id ' + connection.threadId);
});

// 执行 SQL 查询
connection.query('SELECT * FROM your_table', (error, results, fields) => {
    if (error) throw error;
    console.log('查询结果:', results);
});

// 关闭连接
connection.end();

解释

  1. host: MySQL 服务器的主机名或 IP 地址。
  2. user: 登录 MySQL 的用户名。
  3. password: 登录 MySQL 的密码。
  4. database: 要使用的数据库名称。
  5. socketPath: MySQL 服务器的 Unix 套接字路径。

通过提供正确的 socketPath,你可以确保 node-mysql 使用正确的连接方式与 MySQL 服务器通信,从而避免 ECONNREFUSED 错误。


在使用 node-mysql 连接 MySQL 数据库时,如果数据库服务器不是通过 TCP/IP 网络连接的,而是通过 Unix 套接字(Unix socket)进行通信,那么就需要指定 socketPath 参数。这是因为 MySQL 可能配置为仅允许通过本地套接字进行连接。

示例代码

假设你的 MySQL 服务器运行在一个使用套接字连接的环境中,并且套接字文件位于 /tmp/mysql.sock,你可以这样配置连接:

const mysql = require('mysql');

const connection = mysql.createConnection({
    host: 'localhost', // 或者任何主机名
    user: 'yourusername',
    password: 'yourpassword',
    database: 'yourdatabase',
    socketPath: '/tmp/mysql.sock' // 指定套接字路径
});

connection.connect((err) => {
    if (err) {
        console.error('Error connecting to MySQL:', err.stack);
        return;
    }
    console.log('Connected to MySQL as id ' + connection.threadId);
});

解释

  • socketPath:指定 MySQL 服务器的 Unix 套接字文件的路径。
  • 如果没有提供 socketPath 并且 MySQL 服务器配置为仅接受套接字连接,连接将会失败并抛出 ECONNREFUSED 错误。

确保你提供的 socketPath 路径是正确的,并且 MySQL 服务正在监听该套接字文件。如果使用的是不同的操作系统或环境,套接字路径可能有所不同。

回到顶部