繁体   English   中英

通过tunnel-ssh模块启动sequelizer mysql连接

[英]initiating sequelizer mysql connection via tunnel-ssh module

我想使用Sequelizer连接到MySQL数据库。 现在,我收到一个“连接被拒绝”错误。

要访问数据库,我必须使用SSH进行登录。据Mick Hansen所述: https : //github.com/sequelize/sequelize/issues/3753 ,使用SSH进行登录的一种方法是使用tunnel-ssh建立隧道,然后启动Sequelizer。

到目前为止,我的方法(未成功)是启动隧道,然后在隧道打开时测试Sequelizer是否已通过身份验证。

更新资料

  • 主持人:DigitalOcean
  • CLI成功:我可以1)SSH进入digitalocean服务器2)从服务器登录mysql,3)以root用户身份访问所有数据库信息。
  • Sequel Pro:我也可以使用Sequel Pro登录数据库。
  • MySQL 127.0.0.1:3306:基于mysql / my.cnf文件,端口为3306,绑定地址为127.0.0.1。 配置文件还说,如果有必要,默认设置是仅在本地主机上侦听而不是跳过网络。
  • socketPath->错误连接有时从TCP切换到套接字似乎可以解决这种类型的问题,但是当我尝试使用它时,我仍然遇到连接被拒绝的错误。
  • 2错误类型- “所有配置的身份验证方法均失败”“错误连接被拒绝”

谢谢您的帮助!

码:

// sequelize config
 var sequelize = new Sequelize('database', 'user', 'pass', {
  host: '127.0.0.1',
  dialect: 'mysql',
  port: 3306,

  pool: {
    max: 10,
    min: 0,
    idle: 20000
  }
});

// tunnel config
var config = {
      user:'user',
      host:'sshHost',
      port:22,
      dstHost:'127.0.0.1',
      dstPort:3306,
      srcHost:'127.0.0.1',
      srcPort:3306,
      localHost:'127.0.0.1',
      localPort: 3306,
      privateKey:require('fs').readFileSync('/path/to/key')
    };

var tunnel = require('tunnel-ssh');

// initiate tunnel
tunnel(config, function (error, server) {
  //....
  if(error) {
    console.error(error);
  } else {
    console.log('server:', server);

  // test sequelize connection
    sequelize
        .authenticate()
        .then(function(err) {
            console.log('Connection established');
        })
        .catch(function(err) {
            console.error('unable to establish connection', err);
        })
  }
})

当我的配置设置为上述对象时,出现“所有配置方法失败错误”

如果将配置更改为以下内容, 则会出现“ Sequelize Error Connection Refused”错误。

// tunnel config
    var config = {
          user:'user',
          host:'sshHost',
          port:22,
          dstHost:'127.0.0.1',
          dstPort:3306,
          //srcHost:'127.0.0.1',
          //srcPort:3306,
          //localHost:'127.0.0.1',
          //localPort: 3306,
          privateKey:require('fs').readFileSync('/path/to/key')
        };

localPort是在本地系统上侦听的端口。 当前,您已将其定义为27000,但将Sequelize配置设置为3306。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM