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