mysql - 将 Cloud Function (nodejs) 连接到 CloudSQL mySQL 数据库

标签 mysql node.js google-cloud-platform google-cloud-functions google-cloud-sql

我正在尝试将 Google Cloud Function(第 2 代,nodejs 18)连接到 CloudSQL mySQL 数据库。它们位于 Google Cloud 中的同一项目和同一区域。

坦白说,我现在已经花了几个小时试图连接并浏览无数的网页。

我正在关注: https://cloud.google.com/sql/docs/mysql/connect-functions#node.js 但这只给了我连接部分。我不清楚如何最好地使用它设置的池。它将我链接到 GitHub 中的代码,但该代码的功能和复杂性比我准备的要多得多。我只想从一个简单的表格中读取内容。

我已经仔细检查了我的所有连接。我可以使用用户名和密码通过 mySQL Workbench 连接到表。我已向服务帐号授予 Cloud SQL Client 权限。我简直不敢相信将同一项目中的 Google 产品与 Google 产品连接起来竟然如此困难。

有人可以给我正确的代码,我可以剪切和粘贴并添加我的凭据以从数据库中读取表格吗?我正在寻找“const mysql = require('promise-mysql');”中的所有内容在控制台日志中返回数据库中的值。如果我能弄清楚这种联系,我就可以完成剩下的工作。

在数据库上,公共(public)和私有(private) IP 连接均已启用。

如果我需要设置任何其他内容,请告诉我。

我的最新版本是:

var mysql = require('mysql');

var con = mysql.createConnection({
  user: '***********',
  password: '***************',
  database: '***********',
  socketPath: '/cloudsql/******************'
});

con.connect(function(err) {
  if (err) throw err;
  con.query("SELECT * FROM **********", function (err, result, fields) {
    if (err) throw err;
    console.log(result);
  });
});

但是我得到了错误: 连接 ENOENT/cloudsql/<> 在 PipeConnectWrap.afterConnect [as oncomplete] (node:net:1494:16)

我希望得到一些指导。

最佳答案

几件事:

  • 看起来您包含了套接字路径而不是主机信息(服务器的 IP 地址)。其余代码看起来不错

  • 为了进行故障排除,我会删除该查询,并在确保连接良好后将其重新添加

试试这个:

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
});

  • 如果您仍然遇到连接问题,请确保您还添加了家庭/办公室/网络服务器网络的 IP 地址,以允许连接到 Google Cloud。通过 Google Cloud mySQL 连接菜单尝试入站和出站测试(服务器 IP 到您的 IP,反之亦然。)

  • 如果您启用了 SSL,则需要生成证书并包含一些用于连接的附加代码

  • 确保您已在 mySQL 服务器上设置表并向其中插入一些数据,否则查询将不会返回任何内容


2023.04.29回复@YKStacker(评论太长):

本地主机应该是您尝试连接的 Google Cloud mySQL 数据库的 IP 地址。如果您转到 Google Cloud SQL 概述页面,它位于“连接到此实例”下方。

然后,转到左侧菜单上的“连接”页面,然后转到“连接测试”选项卡。点击“创建”

  • 入站
  • TCP
  • 当前云实例
  • 其他
    • IP地址
      • 输入托管 mySQL Workbench/Webserver 的网络的外部 IP
      • 如果这是您当前使用的网络,只需转到 IP Chicken得到它
  • 取消选中“这是 Google Cloud 中使用的 IP 地址”
  • 确保本地网络的防火墙设置允许端口 80 上的传入流量
  • 创建

这将测试您从 Google Cloud 接收数据的能力。

接下来,返回“连接测试”并创建另一个连接,以测试您向 Google Cloud 发送数据的能力(只需颠倒顺序,但选中显示 Google Cloud 中使用的 IP 的复选框并选择您的项目。)

如果这不起作用,请转到“网络”选项卡,并确保将您的公共(public) IP 地址添加到“授权网络”,然后重试。

如果这些测试失败,则表明您的连接设置有问题。

以下是有关 package.json 设置的更多信息:Google Cloud - Specifying Dependencies for Node.js

关于mysql - 将 Cloud Function (nodejs) 连接到 CloudSQL mySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76134635/

相关文章:

mysql - SQL中查询多对多关系

mysql - 使用 Python 3.7 与 MySQL 的 SSL 连接错误。接口(interface)错误 : SSL connection error: Failed to set ciphers to use

node.js - 从 Firebase Cloud Function 连接到 Stripe 时出错

javascript - Sequelizejs belongsToMany 与 otherKey 的关系

mysql - 使用 MySQL 中另一表的数据更新多行一列

Mysql 按日期时间或unixtime获取用户多行的最新记录

node.js - 如何安装 yeoman ?

sql - 在 BigQuery 中将行转置为列(Pivot 实现)

google-app-engine - 使用 Google Cloud Platform 运行 Websockets

java - Spring Boot - 将应用程序部署到 Google Cloud App 引擎但缺少 app.yaml