sequelize:无法通过localhost登录?

时间:2017-01-26 20:23:10

标签: mysql node.js sequelize.js

我的问题与此问题类似:Cant connect to localhost database with Sequelize (nodejs),但它有一些区别,我无法使用提供的答案。

我正在尝试从docker容器访问mysql服务器。通过映射mysqld.sock提供访问。验证基本连接。例如,在容器内部,我可以运行如下命令。

# mysql --host=localhost --user=root --password=...

但是,我无法使用" 127.0.0.1"作为主持人。关于我接下来需要做什么,这可能是需要考虑的事情。

然后我尝试使用基于Sequelize的nodejs程序验证mysql访问,如下所示。

var Sequelize = require('sequelize')
var sequelize = new Sequelize('mysql', 'root', '...', {
  host: 'localhost',
  dialect: 'mysql',
  pool: {
    max: 5,
    min: 0,
    idle: 10000
  },
});

sequelize
  .authenticate()
  .then(function(err) {
    console.log('Connection has been established successfully.');
  })
  .catch(function (err) {
    console.log('Unable to connect to the database:', err);
  });

当我运行它时,它报告连接被拒绝。

Unable to connect to the database: { SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:3306
at Handshake._callback (/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:80:20)
at Handshake.Sequence.end (/node_modules/mysql/lib/protocol/sequences/Sequence.js:86:24)
at Protocol.handleNetworkError (/node_modules/mysql/lib/protocol/Protocol.js:364:14)
at Connection._handleNetworkError (/node_modules/mysql/lib/Connection.js:428:18)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at emitErrorNT (net.js:1278:8)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
  name: 'SequelizeConnectionRefusedError',
  message: 'connect ECONNREFUSED 127.0.0.1:3306',
  parent:
   { Error: connect ECONNREFUSED 127.0.0.1:3306
   at Object.exports._errnoException (util.js:1022:11)
   at exports._exceptionWithHostPort (util.js:1045:20)
   at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1087:14)
   --------------------
   at Protocol._enqueue (/node_modules/mysql/lib/protocol/Protocol.js:141:48)
   at Protocol.handshake (/node_modules/mysql/lib/protocol/Protocol.js:52:41)
   at Connection.connect (/node_modules/mysql/lib/Connection.js:130:18)
   at /node_modules/sequelize/lib/dialects/mysql/connection-manager.js:75:16
   at Promise._execute (/node_modules/bluebird/js/release/debuggability.js:300:9)
   at Promise._resolveFromExecutor (/node_modules/bluebird/js/release/promise.js:481:18)
   at new Promise (/node_modules/bluebird/js/release/promise.js:77:14)
   at ConnectionManager.connect (/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:55:10)
   at ConnectionManager.<anonymous> (/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:247:43)
   at ConnectionManager.tryCatcher (/node_modules/bluebird/js/release/util.js:16:23)
   at Promise._settlePromiseFromHandler (/node_modules/bluebird/js/release/promise.js:510:31)
   at Promise._settlePromise (/node_modules/bluebird/js/release/promise.js:567:18)
   at Promise._settlePromise0 (/node_modules/bluebird/js/release/promise.js:612:10)
   at Promise._settlePromises (/node_modules/bluebird/js/release/promise.js:691:18)
   at Async._drainQueue (/node_modules/bluebird/js/release/async.js:133:16)
   at Async._drainQueues (/node_modules/bluebird/js/release/async.js:143:10)
 code: 'ECONNREFUSED',
 errno: 'ECONNREFUSED',
 syscall: 'connect',
 address: '127.0.0.1',
 port: 3306,
 fatal: true },
  original:
   { Error: connect ECONNREFUSED 127.0.0.1:3306
   at Object.exports._errnoException (util.js:1022:11)
   at exports._exceptionWithHostPort (util.js:1045:20)
   at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1087:14)
   --------------------
   at Protocol._enqueue (/node_modules/mysql/lib/protocol/Protocol.js:141:48)
   at Protocol.handshake (/node_modules/mysql/lib/protocol/Protocol.js:52:41)
   at Connection.connect (/node_modules/mysql/lib/Connection.js:130:18)
   at /node_modules/sequelize/lib/dialects/mysql/connection-manager.js:75:16
   at Promise._execute (/node_modules/bluebird/js/release/debuggability.js:300:9)
   at Promise._resolveFromExecutor (/node_modules/bluebird/js/release/promise.js:481:18)
   at new Promise (/node_modules/bluebird/js/release/promise.js:77:14)
   at ConnectionManager.connect (/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:55:10)
   at ConnectionManager.<anonymous> (/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:247:43)
   at ConnectionManager.tryCatcher (/node_modules/bluebird/js/release/util.js:16:23)
   at Promise._settlePromiseFromHandler (/node_modules/bluebird/js/release/promise.js:510:31)
   at Promise._settlePromise (/node_modules/bluebird/js/release/promise.js:567:18)
   at Promise._settlePromise0 (/node_modules/bluebird/js/release/promise.js:612:10)
   at Promise._settlePromises (/node_modules/bluebird/js/release/promise.js:691:18)
   at Async._drainQueue (/node_modules/bluebird/js/release/async.js:133:16)
   at Async._drainQueues (/node_modules/bluebird/js/release/async.js:143:10)
 code: 'ECONNREFUSED',
 errno: 'ECONNREFUSED',
 syscall: 'connect',
 address: '127.0.0.1',
 port: 3306,
 fatal: true } }

我怀疑问题是Sequelize尝试翻译&#34; localhost&#34;在程序中给出了#127; 127.0.0.1&#34;,并且通过127.0.0.1访问mysql在容器内不起作用。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

使用dialectOptions

解决(好吧,在某种程度上)
dialectOptions: {
  socketPath: '/var/run/mysqld/mysqld.sock',
  ...
}
相关问题