MySQL ‘ETIMEDOUT’ error MacOS Monterey when attempting to connect to server

I think I have exhausted all of my options for trying to get MySQL to connect to my express server. Scoured the Google machine, etc.. I am fairly new to MySQL, although I had to wipe out my computer recently and have since tried to get MySQL working to no avail.

I am able to connect to MySQL and create a db locally. However, when trying to connect to the server it looks like it will work, and then after about 10 seconds I am greeted with an ETIMEDOUT error. I’m guessing that this is a network error of some sort, I just can’t seem to get to the bottom of it.

For what it’s worth I am using the latest MacOS, Node v17.6.0, Server version: 8.0.28 Homebrew

I verified the correct port:

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

mysql>

The error message:

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

> <a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2a4e4f4745074e486a1b041a041a">[email protected]</a> 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$

Here is my code:

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}`);
});

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

3306 is your DB Port. Change the other port (const PORT = process.env.PORT || 3306;) to something else, typically 3000 or 3001.

Method 2

This fixes the error:

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")
);

However, I’d like to configure localhost to be 127.0.0.1 How would I do that?


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x