具有 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 云功能,具有对外部 api 的基本身份验证的获取请求
具有实时数据库触发器的 Firebase 云功能:如何更新源节点?