【发布时间】:2021-12-03 12:17:02
【问题描述】:
我正在尝试将我的 express js 应用程序部署到应用程序引擎,并且我想将此应用程序引擎链接到 mysql 数据库,但是在连接到数据库时出现此错误:
Error: connect ENOENT /cloudsql/********3li at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1145:16)
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] --------------------
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] at Protocol._enqueue (/app/node_modules/mysql/lib/protocol/Protocol.js:144:48)
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] at Protocol.handshake (/app/node_modules/mysql/lib/protocol/Protocol.js:51:23)
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] at PoolConnection.connect (/app/node_modules/mysql/lib/Connection.js:116:18)
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] at Pool.getConnection (/app/node_modules/mysql/lib/Pool.js:48:16)
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] at Pool.query (/app/node_modules/mysql/lib/Pool.js:202:8)
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] at /app/api/routes/users.js:48:22
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] at processTicksAndRejections (internal/process/task_queues.js:97:5) {
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] errno: 'ENOENT',
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] code: 'ENOENT',
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] syscall: 'connect',
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] address: '/cloudsql/********3li ',
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] fatal: true
2021-10-15 08:46:41 appengineedokanapi[20211015t103941] }
我也在使用带有 express js 的 node-mysql 库
const pool = mysql.createPool({
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
socketPath: `/cloudsql/${process.env.INSTANCE_CONNECTION_NAME}`,
})
app.yaml 包含:
env_variables:
INSTANCE_CONNECTION_NAME : ********3li
DB_DATABASE : databaseName
DB_USER : databaseUser
DB_PASSWORD : *******
【问题讨论】:
-
如果凭据正确,您确定它没有被防火墙阻止您的连接吗? MySQL 非常特定于通配符或指定连接。
-
@blanknamefornow 您好,我的凭据是正确的。我认为同一个项目中的所有应用程序都是默认授权的,或者你的意思是另一回事?
-
MySQL 没有监听您的连接,在您的客户端返回错误。修复方法是让 MySQL 以某种方式监听这个应用程序。可能是 MySQL 上的防火墙,允许特定的连接,而这个应用程序不是一个,MySQL 中的用户配置不正确或其他几个,但问题指向 MySQL 没有监听您的应用程序。
-
虽然有些搜索,也许你的 socketPath 不正确,很少有帖子会建议它。stackoverflow.com/questions/50434036/…
-
你
INSTANCE_CONNECTION_NAME是正确的吗?您是在写实例名称还是完整的连接名称,其格式为{project-id}:europe-west1:{database}作为@blanknamefornow 共享的链接
标签: node.js express google-app-engine gcloud node-mysql