MySQL 'ETIMEDOUT' 尝试连接到服务器时出现 MacOS Monterey 错误

MySQL 'ETIMEDOUT' error MacOS Monterey when attempting to connect to server

我想我已经用尽所有方法来尝试 MySQL 连接到我的快速服务器。搜索了 Google 机器等。我对 MySQL 还很陌生,尽管我最近不得不清空我的电脑,此后一直试图让 MySQL 工作无济于事。

我能够连接到 MySQL 并在本地创建数据库。但是,当尝试连接到服务器时,它看起来可以正常工作,然后在大约 10 秒后我收到 ETIMEDOUT 错误。我猜这是某种网络错误,我似乎无法追根究底。

我使用的是最新的 MacOS,Node v17.6.0,服务器版本:8.0.28 Homebrew

我验证了正确的端口:

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0.01 sec)

mysql> 

错误信息:

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> quit
Bye
chriss-air:demo-db pesarcomputer$ npm start

> demo-db@1.0.0 start
> node server.js

Connected to the election database
Server running on port 3306
node:events:505
      throw er; // Unhandled 'error' event
      ^

Error: connect ETIMEDOUT
    at Connection._handleTimeoutError (/Users/pesarcomputer/Dropbox/Mac/Documents/my-sql/demo-db/node_modules/mysql2/lib/connection.js:189:17)
    at listOnTimeout (node:internal/timers:559:17)
    at processTimers (node:internal/timers:502:7)
Emitted 'error' event on Connection instance at:
    at Connection._notifyError (/Users/pesarcomputer/Dropbox/Mac/Documents/my-sql/demo-db/node_modules/mysql2/lib/connection.js:236:12)
    at Connection._handleFatalError (/Users/pesarcomputer/Dropbox/Mac/Documents/my-sql/demo-db/node_modules/mysql2/lib/connection.js:167:10)
    at Connection._handleNetworkError (/Users/pesarcomputer/Dropbox/Mac/Documents/my-sql/demo-db/node_modules/mysql2/lib/connection.js:180:10)
    at Connection._handleTimeoutError (/Users/pesarcomputer/Dropbox/Mac/Documents/my-sql/demo-db/node_modules/mysql2/lib/connection.js:193:10)
    at listOnTimeout (node:internal/timers:559:17)
    at processTimers (node:internal/timers:502:7) {
  errorno: 'ETIMEDOUT',
  code: 'ETIMEDOUT',
  syscall: 'connect',
  fatal: true
}

Node.js v17.6.0
chriss-air:demo-db pesarcomputer$ lsof -i :3306
COMMAND    PID          USER   FD   TYPE            DEVICE SIZE/OFF NODE NAME
mysqld    3104 pesarcomputer   21u  IPv4 0xd408ceb9108e063      0t0  TCP localhost:mysql (LISTEN)
mysqld    3104 pesarcomputer   36u  IPv4 0xd408ceb96cb4b43      0t0  TCP localhost:mysql->localhost:49631 (ESTABLISHED)
TablePlus 3143 pesarcomputer   20u  IPv4 0xd408ceb9109c013      0t0  TCP localhost:49631->localhost:mysql (ESTABLISHED)
chriss-air:demo-db pesarcomputer$ 

这是我的代码:

const mysql = require("mysql2");
const express = require("express");

const PORT = process.env.PORT || 3306;
const app = express();

app.use(express.urlencoded({ extended: false }));
app.use(express.json());

const db = mysql.createConnection(
  {
    host: "localhost",
    port: "3306",
    user: "root",
    password: "password",
    database: "election",
    // debug: true,
  },
  console.log("Connected to the election database")
);

app.get("/", (req, res) => {
  res.json({
    message: "Hello World",
  });
});

// app.use((req, res) => {
//   res.status(404).end();
// });

app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

3306 是您的数据库端口。将另一个端口 (const PORT = process.env.PORT || 3306;) 更改为其他端口,通常为 3000 或 3001。

这修复了错误:

const mysql = require("mysql2");
const express = require("express");

const PORT = process.env.PORT || 3000;
const app = express();

app.use(express.urlencoded({ extended: false }));
app.use(express.json());

const db = mysql.createConnection(
  {
    host: "127.0.0.1",
    port: "3306",
    user: "root",
    password: "password",
    database: "election",
    // debug: true,
  },
  console.log("Connected to the election database")
);

但是,我想将 localhost 配置为 127.0.0.1 我该怎么做?