mysql - Nodejs 应用程序无法在 FreeBSD 8.2-STABLE 上连接到本地 MySQL

标签 mysql node.js freebsd

伙计们。

我已经使用 npm install mysql 安装了适用于 Node.js 的 MySQL 模块,但遇到了连接错误。

这是我的 js 代码。

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'user',
  password : 'userpassword',
  database : 'node'
});

connection.connect();

connection.query('SELECT * FROM table', function(err, rows, fields) {
  if (err) throw err;
  console.log('The solution is: ' + fields);
});

connection.end();

这是我得到的输出:

Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'node'@'146.66.*.*' (using password: YES)
at Handshake.Sequence._packetToError (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/sequences/Sequence.js:48:14)
at Handshake.ErrorPacket (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/sequences/Handshake.js:101:18)
at Protocol._parsePacket (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/Protocol.js:270:23)
at Parser.write (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/Parser.js:77:12)
at Protocol.write (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/Protocol.js:39:16)
at Socket.<anonymous> (/usr/local/www/apache22/data/node/node_modules/mysql/lib/Connection.js:82:28)
at Socket.EventEmitter.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:746:14)
at Socket.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:408:10)
--------------------
at Protocol._enqueue (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/Protocol.js:135:48)
at Protocol.handshake (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/Protocol.js:52:41)
at Connection.connect (/usr/local/www/apache22/data/node/node_modules/mysql/lib/Connection.js:108:18)
at Object.<anonymous> (/usr/local/www/apache22/data/node/local_db.js:9: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 Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)

问题是,它不是通过 localhost 连接到 MySQL(正如我在连接选项中指定的那样),而是通过 externalIPaddress (没有明显的原因),并且防火墙断开连接按照其规则。

我在其他主题中搜索了解决方案,但错误输出或合适的解决方案差异很大。

我还尝试了其他问题中相关问题的流行解决方案,这是选项列表,但对我不起作用: 1. 创建新用户并授予必要的权限后刷新 MySQL 权限表。 2. 修改 /etc/hosts 以从 nslookup localhostnslookup localhost 获取正确答案。 3.手动指向MySQL套接字的路径也没有改变任何东西。 4. 我没有同时使用 hostserver 选项。 5.我尝试过指定3306端口。

毕竟,我仍然遇到同样的错误。

提前感谢您的帮助。

最佳答案

默认情况下mysql绑定(bind)并监听0.0.0.0处的“所有”地址。也许您的 node 和您的 node.js 模块正在做同样的事情。这将使请求和响应通过您的外部接口(interface)发送并触发您的防火墙。

根据您的输出,我假设 node 和 MySQL 在同一台计算机上,并且您使用 Apache 作为反向代理。如果是这种情况,则只有 httpd 应该监听外部地址上的端口:nodemysql 等应该通过以下方式相互通信本地接口(interface)或通过套接字。

检查您的配置并确保nodemysql-server正在绑定(bind)/监听lo接口(interface)上的端口,localhost 127.0.0.1。这可以解决您的问题。

HTH,G'Cito

关于mysql - Nodejs 应用程序无法在 FreeBSD 8.2-STABLE 上连接到本地 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25182967/

相关文章:

mysql - Clickhouse 列结构

javascript - 在 docker compose 中运行后续迁移

c++ - mknod(2) 要求 FreeBSD 上的 super 用户使用什么代替?

mysql - 选择嵌套集中的项目

php - 使用远程 php 脚本将 mysqli_query() 发送到 Intranet

mysql - 如何从表中获取基于月份和年份的记录?

node.js - npm 模块实现包装 shell 命令的模式?

node.js - NodeJS OSC 接收并分发到本地网络

java - jmockit、openJDK 和 UnsatisfiedLinkError

c - 以编程方式管理 FreeBSD Jails