【问题标题】:How to troubleshoot Google Cloud MySQL connectivity Issues?如何排查 Google Cloud MySQL 连接问题?
【发布时间】:2022-01-05 17:06:41
【问题描述】:

我正在努力从谷歌云功能连接到我的数据库实例。使用我的休息客户端我得到了错误:

错误:连接 ENOENT /cloudsql/my-project:us-central1:my-data-lake at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1146:16) ---------- ---------- 在 Protocol._enqueue (/Users/me/Code/dietstats/node_modules/mysql/lib/protocol/Protocol.js:144:48) 在 Protocol.handshake (/Users/me/代码/dietstats/node_modules/mysql/lib/protocol/Protocol.js:51:23) 在 PoolConnection.connect (/Users/me/Code/dietstats/node_modules/mysql/lib/Connection.js:116:18) 在 Pool .getConnection (/Users/me/Code/dietstats/node_modules/mysql/lib/Pool.js:48:16) 在/Users/me/Code/dietstats/node_modules/typeorm/driver/mysql/MysqlDriver.js:863: 18 在 MysqlDriver.createPool (/Users/me/Code/dietstats/node_modules/typeorm/driver/mysql/MysqlDriver.js:860:16) 在 MysqlDriver 的 new Promise ()。 (/Users/me/Code/dietstats/node_modules/typeorm/driver/mysql/MysqlDriver.js:288:51)在步骤(/Users/me/Code/dietstats/node_modules/tslib/tslib.js:143:27)在 Object.next (/Users/me/Code/dietstats/node_modules/tslib/tslib.js:124:57)

在我的云记录器中,我仅在尝试连接时看到以下消息:

“2022-01-05T16:56:21.312241Z 44943 [警告] 用户 'mysql.session'@'localhost' 被分配访问权限 0x8000,但只允许拥有 0x0。”

“2022-01-05T16:56:21.312200Z 44943 [警告] mysql.user 中的条目 'root'@'localhost' 被忽略,因为它与 mysql.system_user 中的条目重复”

这很有趣,因为我什至没有使用这些用户进行连接。

那么,对于这些神秘的消息,我该如何解决我的连接问题?

【问题讨论】:

  • 你可以使用 mysql 客户端从 VM 连接吗?您是如何在 Cloud SQL 实例上设置连接的?私有IP?公共IP?首先将 Cloud Functions 排除在外,以确保您可以访问您的实例。
  • 在等待上述 cmets 中请求的信息时,请查看以下可能对您有所帮助的文档:cloud.google.com/sql/docs/mysql/error-messagescloud.google.com/sql/docs/mysql/diagnose-issues
  • @GabeWeiss 对于 DX 审查,请参阅下面的答案。我有一些东西在本地和 gCloud 中工作,但我很挣扎,因为我不知道云功能级权限以及这些权限如何在连接到其他 Google 服务时生效。

标签: mysql google-cloud-platform google-cloud-functions typeorm


【解决方案1】:

我有几个概念上的障碍需要克服。

  1. 权限:数据库、云功能和 iAm 角色具有用户权限。我特别关注云功能的权限,我能够通过授予“所有用户”完全访问权限来使其工作。这并不安全,但它正在工作。我仍然不确定如何将云功能的正确服务帐户连接到对数据库的请求。任何建议都会有所帮助。

  2. 产品与开发(模拟器)。我现在记得在 google 生态系统中访问权限不那么严格,因此在我的模拟器上运行我的函数对于故障排除来说是个坏主意。有很多方法(例如 SSL 或 VM),但我可以弄清楚。最终,我不得不每次都进行部署。

  3. ORM:我是第一次使用 typeorm,很多教程已经过时了。

这些新挑战的融合使得解决其中任何一个问题变得困难。

【讨论】:

  • 具体来说,调用云函数有问题吗?还是从云函数调用数据库有问题?当您说“所有用户”完全访问时,您具体设置的是什么?
  • 从云函数调用数据库。 “所有用户”权限与云功能相关联,而不是与数据库相关联
  • 明白了,所以当您说“授予所有用户完全访问权限”时,您的意思是在数据库范围内开放吗?你是怎么做到的? Cloud SQL 端或 Cloud Run 端的东西?理论上,为了获得访问权限,您只需将 Cloud Run 实例使用的服务帐户设置为具有 Cloud SQL 客户端角色的服务帐户。默认情况下,Cloud Run 使用没有该角色的默认 Compute Engine 服务帐号。因此,您可以授予具有 Cloud SQL 角色的 Compute 服务帐号,或者使用不同的服务帐号(推荐)分配给 Cloud Run。
  • 这当然也取决于它如何设置 Cloud SQL 实例。如果您仅在 Cloud SQL 实例上设置为私有 IP 连接,那么您还必须设置无服务器 VPC 连接器,并将其与 Cloud Run 相关联(可以在编辑和部署新修订的下拉菜单中设置它部分)。
  • 来自这个界面:console.cloud.google.com/functions/details/us-central1/… principal="All Users" role="Cloud Functions Invoker"
猜你喜欢
  • 2018-02-16
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
相关资源
最近更新 更多