具有 Firebase 云功能的非 Google MySQL 数据库连接

Posted

技术标签:

【中文标题】具有 Firebase 云功能的非 Google MySQL 数据库连接【英文标题】:non-Google MySQL database connection with firebase cloud function 【发布时间】:2019-05-04 18:45:52 【问题描述】:

当我尝试连接到我的 mysql 时,服务器向我发送了一个错误 Error: connect ETIMEDOUT

这里是示例代码

const mysql = require('mysql');
const mysqlConfig = 
        connectionLimit: 1,
        host: "remote_host_ip",
        user: "server_user",
        password: "server_pass",
        database: "server_db",
        port: 3306
    ;
    mysql.createConnection(mysqlConfig).connect(function (err) 
        if (!err) 
            console.log("Database is connected");
         else 
            console.log("Database is not connected " + err);
        
    );

我正在执行 Firebase blaze(现收现付)计划。

【问题讨论】:

您的 MySQL 数据库是否允许来自外部 IP 地址的连接? 您的项目是付费计划还是免费/Spark 计划?如果是后者,则会阻止对非 Google 服务的调用以防止滥用。见***.com/questions/42784135/… @Chris 你是对的。我的 MySQL 数据库不允许来自外部 IP 地址的连接。 【参考方案1】:

我知道问题标题已经说明了,但您没有使用 GCP Cloud SQL,对吧?

在这种情况下,您的 MySQL 服务器很有可能无法从 Cloud Functions 访问。您确定网络连接正常吗?

此外,即使在 Cloud Functions 中,it's a good idea to use connection pools。考虑使用它,它会是这样的:

  var config = 
    user: 'root',
    password: 'akdaskdasdaE',
    database: 'database1'
  
  config.connectionLimit = 10
  config.multipleStatements = true

  // needed in GCP Cloud SQL, but it seems it's not your case
  // config.socketPath = `/cloudsql/__INSTANCE_CONNECTION_NAME__`

  var connectionPool = mysql.createPool(config)
  connectionPool.on('connection', () => 
      console.log(`[connectionPool] new connection opened`)
  )

  // then you use connectionPool.getConnection(..)

【讨论】:

你说得对,我的 MySQL 数据库无法通过 firebase 云函数访问。 你的意思是你的数据库有防火墙规则......还是firebase云功能不允许将数据连接到另一个数据库? 据我所知,从云功能到其他数据库/网络/云提供商等的数据连接没有网络限制 @mjsunny 顺便说一句,如果您认为这是一个正确的答案,请采纳!欢呼

以上是关于具有 Firebase 云功能的非 Google MySQL 数据库连接的主要内容,如果未能解决你的问题,请参考以下文章

具有 Firebase 云功能的高 TTFB

Firebase 云功能,具有对外部 api 的基本身份验证的获取请求

将Firebase存储与Google云CDN集成

具有实时数据库触发器的 Firebase 云功能:如何更新源节点?

Flutter / Firebase:管理员具有应用内功能或云功能?

文件上传的 Firebase 云功能