4

尝试连接到我的本地主机数据库时遇到了很多麻烦。我尝试过使用mysqlmysql-simple节点模块,但在这两种情况下我都无法连接。

这是我与“mysql”模块一起使用的内容:

var mysql = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  port     : '8000',
  user     : 'uber',
  password : 'pass',
});

connection.connect(function(err) {
      if (err) throw err;

      console.log('Connection Successful');
});


connection.query('USE someDB', function(err) {
  if (err) throw err;

  console.log('Query Successful');
});

这里是我在 'mysql-simple' 模块中使用的:

var database = require('mysql-simple');
database.init('uber', 'pass', 'mysql', 'localhost', 8000);

database.querySingle('SELECT Host FROM user', function(err, results) {
    if (err) {
        console.log('error fetching some active users: ' + err);
        return;
    }
    log('Query Successful');
    for (var i = 0; i < results.length; i++)
        console.log('got active user ' + results[i]);
}

在这两种情况下,当我运行我的 node.js 服务器时,它都不会记录它的连接。我尝试将 localhost 替换为 '127.0.01' 并创建一个新用户以确保密码正确,但无济于事。为什么连不上?

谢谢

4

7 回答 7

7

很可能网络已关闭,这意味着 mysql 服务器通过 UNIX 套接字而不是通过 TCP/IP 与客户端通信。您可以检查正在运行的 mysql 客户端并运行“状态”命令。如果您在那里看到端口号,那么您的 mysql 服务器通过 TCP/IP 进行通信,否则您将看到类似“socket pathname...”的内容,获取路径名并将其提供给 node.js 连接参数,例如

... socketPath: '/opt/lampp/var/...', ...

https://github.com/felixge/node-mysql页面中查看(搜索“socketPathname”)

希望,那是你的问题。

于 2014-07-12T18:16:43.487 回答
2

您应该使用 mysql_config 来显示套接字的路径。
这是我 MAC 上的示例

QuyLes-MacBook-Pro:freelancer quyle$ mysql_config
Usage: /Applications/MAMP/Library/bin/mysql_config [OPTIONS]
Options:
        --cflags         [-I/Applications/MAMP/Library/include -fno-omit-frame-pointer   -g -DNDEBUG]
        --include        [-I/Applications/MAMP/Library/include]
        --libs           [-L/Applications/MAMP/Library/lib  -lmysqlclient  -lz]
        --libs_r         [-L/Applications/MAMP/Library/lib   -lmysqlclient_r  -lz]
        --plugindir      [/Applications/MAMP/Library/lib/plugin]
        --socket         [/Applications/MAMP/tmp/mysql/mysql.sock]
        --port           [0]
        --version        [5.5.42]
        --libmysqld-libs [-L/Applications/MAMP/Library/lib  -lmysqld]
        --variable=VAR   VAR is one of:
                pkgincludedir [/Applications/MAMP/Library/include]
                pkglibdir     [/Applications/MAMP/Library/lib]
                plugindir     [/Applications/MAMP/Library/lib/plugin]

然后,为您的 MysqlConnection 添加密钥 socketPath。
在我的样本上咆哮

MysqlServer: {
     adapter: 'sails-mysql',
     host: 'localhost',
     user: 'root', //optional
     password: 'root', //optional
     database: 'nodejs', //optional,
     socketPath: '/Applications/MAMP/tmp/mysql/mysql.sock'    
},
于 2017-01-04T11:49:44.363 回答
1

改变这个

database.init('uber', 'pass', 'mysql', 'localhost', 8000);

database.init('uber', 'pass', 'mysql', 'localhost', 3306);

你应该通过

于 2013-07-05T16:25:27.143 回答
1

确保 MySQL 和 express 在同一个端口上运行。我从 XAMPP 捆绑了 MySQL,它在端口 3036 上运行。在将 app.listen 设置为 3036 时,我的代码有效。最后!

于 2016-12-15T05:42:59.283 回答
0

试试这个代码它对我有用

var mysql = require('mysql');

var connection = mysql.createConnection(
    {
      host     : 'localhost',
      user     : 'root',
      password : '',
      database : 'urdatabase',
    }
);

connection.connect();


query = connection.query("SELECT * FROM UrTable;");
    query
    .on('error', function(err) {
        console.log( err );

    })
    .on('result', function( data ) {
        socket.emit('YourData',data);
    });

我希望这对你有帮助

于 2013-07-05T20:43:02.890 回答
0

就我而言,任何事情都发生了,所以我通过为 nodejs 应用程序的新用户生成新的 GRANT 来解决

于 2020-02-17T14:10:20.537 回答
0

它是由于在 MySQL 配置中关闭了网络。

在 Ubuntu 20.04.2 和 MySQL 8.xx(它在我的情况下工作)你可以在

/etc/systemd/system/mysql.service.d/override.conf

会有一个ExecStart键,它有多个配置。在这里您可以将--skip-networking 设置OFF

--skip-networking=OFF

你必须重新启动你的服务

systemctl restart mysql.service

它将允许您连接本地主机

于 2021-07-09T10:42:01.287 回答