首页 > 解决方案 > 访问远程数据库时连接 ETIMEDOUT 错误,即使端口 3306 已打开

问题描述

这是我第一次使用nodejs。我正在尝试使用对话流构建聊天机器人,并且正在尝试访问托管在服务器上的网站的数据库。但是,它给了我一个 ETIMEDOUT 错误,即使端口对用户“omkar”是开放的。我可以使用用户“omkar”通过设备上的终端访问数据库。遇到此错误的原因可能是什么?这是我的代码:

  function connectDataBase(){
const connection=mysql.createConnection({
  host:'ip_of_my_database_server',
  user:'omkar',
  password:'my_password',
  database:'database_name'
});

return new Promise((resolve,reject)=>{
  connection.connect(function(err) {
        if (err) throw err;
    console.log("Connected!");
    });
  resolve(connection);
});}


  function queryDataBase(connection){
return new Promise((resolve,reject)=>{
  connection.query('SELECT * from auth_user',(error,results,fields)=>{
    resolve(results);
  });
});}

  function handlerRank(agent){
return connectDataBase().then(connection=>{
  return queryDataBase(connection).then(result=>{
    console.log('Printing');
    console.log(result);
    agent.add(result[0].first_name);
    connection.end();
  });
});} 

编辑1:

我检查了我的 mysql 数据库是否可以远程访问。外部客户端可以访问端口 3306。此外,用户“omkar”具有查看和更新​​数据库的适当权限。

我正在使用上面的代码编写的 dialogflow 内联编辑器。

标签: mysqlnode.jsdialogflow-es

解决方案


如果是远程数据库,我想你需要在远程数据库中 mysql 配置文件的绑定地址中添加你的 ip。在 /etc/mysql/my.cnf 中找到该文件并通过 'service mysqld restart' 重新启动 mysql 服务器


推荐阅读