【问题标题】:Connection with mysql on remote server via UNIX socket通过 UNIX 套接字与远程服务器上的 mysql 连接
【发布时间】:2020-06-08 21:53:49
【问题描述】:

我通过 UNIX 套接字在远程服务器上有一个 mysql 数据库,并且我将 node.js 部署在同一服务器的不同目录中。我尝试将 node.js 与数据库连接,但我有问题。

我的连接代码:

const database = mysql.createPool({
    host: '127.0.0.1', // is host for mysql database on remote server
    port: 3306,
    user: 'fake_user',
    password: 'fakse_pass',
    database: 'fake_db'
});
database.getConnection(function (err, connection) {
    if (!err) {
        console.log('Database is connected ...');
    } else {
        console.log('Error connecting database ...');
        console.log(err);
    }
});

在这里,我为用户、密码和数据库设置了一个假凭据。我使用的凭据是有效的。我在远程服务器上登录了 phpMyAdmin。

数据库服务器信息:

包.json

{
  "name": "socket-server",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "engines": {
    "node": "12.16.0"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@mysql/xdevapi": "8.0.19",
    "express": "^4.17.1",
    "mysql": "^2.10.2",
    "mysql2": "^2.1.0",
    "socket.io": "^2.3.0"
  },
  "devDependencies": {
    "gulp": "^4.0.2"
  }
}

本地: 节点版本:12.16.0 npm 版本:6.13.4

远程服务器: 节点版本:12.16.1 npm 版本:6.13.4

当我在本地运行时

返回错误:

有人知道如何解决这个问题吗?

【问题讨论】:

  • 在服务器上运行 server.js 时,向我返回:错误:主机 '127.0.0.1' is not allowed to connect to this MariaDB server at Packet.asError跨度>

标签: mysql node.js


【解决方案1】:

看起来phpMyAdmin 是通过 UNIX 套接字连接的,而mysql Node.js 模块是您尝试通过 TCP 主机/端口连接的。也许这就是问题所在。如果是这种情况,您需要将 MySQL 服务器绑定到主机中的 3306 端口,或者,您可以在创建池时使用套接字路径。

const database = mysql.createPool({
  socketPath: '/path/to/your/unix/socket/file.sock'
  user: 'fake_user',
  database: 'fake_db'
})

我注意到您也在以某种方式“使用”X DevAPI 连接器 - @mysql/xdevapi。需要明确的是,它不适用于您的设置,因为它基于 X 协议,而 MariaDB 不支持 AFAIK。

免责声明:我是 MySQL X DevAPI Connector for Node.js 的首席开发人员

【讨论】:

    猜你喜欢
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    相关资源
    最近更新 更多