ERROR 2003 (HY000)

Can't connect to MySQL server on 'localhost' (10061)

Database Errors Intermediate 👁 0 views 📅 May 28, 2026

This pops up when MySQL isn't running or the socket is dead. Seen it on fresh installs and after power outages.

When This Error Hits

You're running a local web app—maybe WordPress, a PHP tool, or your own script—and suddenly you see:

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

I've seen this on fresh MySQL installs on Windows 10, after a power outage on a Linux server, and when someone accidentally killed the mysqld process. The worst case was a client's accounting software that hadn't been backed up for three days. The error is clear: MySQL isn't answering on port 3306.

What's Actually Going Wrong

MySQL needs to be running as a service or daemon. If it's not started, or the socket file is missing (on Unix), or the port is blocked by a firewall, you get this error. On Windows, it's usually the service being set to manual or stopped. On Linux, it's often a corrupt socket or a failed start due to a misconfiguration in my.cnf. The core fix is simple: get MySQL running.

Step-by-Step Fix

Step 1: Check if MySQL is running

Windows: Open Services (services.msc). Look for MySQL or MySQL80 (version number varies). If it's not running, right-click and Start. If it's set to Manual or Disabled, change it to Automatic and start it.

Linux (Ubuntu/Debian): Run:

sudo systemctl status mysql

If it shows inactive (dead), start it:

sudo systemctl start mysql

macOS (Homebrew):

brew services list | grep mysql

If it's not running, start it:

brew services start mysql

Step 2: Verify MySQL is listening on port 3306

Windows: Run this in Command Prompt (as admin):

netstat -ano | findstr :3306

Nothing shows? MySQL isn't listening. Restart the service.

Linux/macOS:

sudo lsof -i :3306

If empty, start MySQL. If you see mysqld in the output, it's running—skip to Step 4.

Step 3: Check the error log

MySQL writes startup failures to its error log. On Windows it's in C:\ProgramData\MySQL\MySQL Server X.Y\Data\*.err. On Linux it's /var/log/mysql/error.log. Open it and look for lines like:

[ERROR] InnoDB: Unable to lock ./ibdata1, error: 11

That means another process (like a previous MySQL instance) still has the file locked. Kill it with kill -9 (Linux) or Task Manager (Windows).

Step 4: Firewall block?

If you're connecting from a different machine (not localhost), port 3306 might be blocked. On Windows, add an inbound rule for TCP port 3306. On Linux, use ufw:

sudo ufw allow 3306/tcp

But for localhost, this is rarely the issue. Skip unless you're remote.

Step 5: Reinstall if it's still dead

Had a client whose MySQL service kept crashing on Windows after an update. The registry entries were shot. Uninstall MySQL completely (using the installer), delete C:\ProgramData\MySQL and C:\Program Files\MySQL, then reinstall. Backup your databases first with mysqldump—or copy the Data folder.

Still Failing? Check These

  • Hostname mismatch: If you use -h 127.0.0.1 instead of localhost, MySQL might use TCP instead of the socket. Sometimes the socket file is missing. Try mysql -u root -p -h 127.0.0.1 to force TCP.
  • my.cnf corruption: A bad bind-address or skip-networking can kill remote connections. Comment out skip-networking if you see it.
  • Disk full: MySQL can't start if the drive is full. Check with df -h (Linux) or check Disk Cleanup on Windows.
  • Port conflict: Run nmap localhost to see if something else grabbed port 3306. Change MySQL's port in my.cnf if needed.

One last tip: on Windows, try running the MySQL installer again and select Reconfigure. It'll reset the service account and often fixes weird permission issues. Saved my butt twice last year.

Was this solution helpful?