Fix MySQL Too Many Connections Error on Linux

By Raman Kumar

Updated on Mar 10, 2026

Fix MySQL Too Many Connections Error on Linux

Learn how to fix the MySQL “Too Many Connections” error on Linux servers. 

Introduction

The “Too Many Connections” error in MySQL appears when the database server reaches the limit of simultaneous client connections allowed by the max_connections configuration.

When this limit is reached, MySQL refuses new connections and applications may display errors such as:

ERROR 1040 (08004): Too many connections

This issue is common on busy production environments, poorly optimized applications, or servers where connection limits were never tuned for real workloads.

In this guide, we walk through a practical step-by-step process to diagnose and resolve the problem safely.

The goal is not only to restore service quickly but also to ensure the issue does not return.

Prerequisites

Before we begin, ensure we have the following:

Learn how to fix the MySQL “Too Many Connections” error on Linux servers. 

Step 1 - Verify the Current Connection Limit

The first step is to check how many connections MySQL currently allows.

Login to the server and open the MySQL shell:

mysql -u root -p

Then run:

SHOW VARIABLES LIKE 'max_connections';

Example output:

+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+

This value shows the maximum concurrent connections MySQL will accept.

Many servers still run with the default value of 151, which can be insufficient for modern web applications.

Step 2 - Check Current Connection Usage

Next, we verify how many connections are currently in use.

Run:

SHOW STATUS LIKE 'Threads_connected';

Example:

Threads_connected: 150

If the number approaches the max_connections limit, the server will soon begin rejecting new connections.

For a real-time view of active sessions:

SHOW PROCESSLIST;

This command displays all active queries and connections.

Step 3 - Identify Long Running or Sleeping Connections

Many connection issues occur because applications open connections but never close them properly.

To check sleeping connections:

SHOW PROCESSLIST;

Look for entries where:

  • Command: Sleep
  • Time: very high value

Sleeping connections can consume resources for long periods.

To terminate a problematic session:

KILL CONNECTION_ID;

Example:

KILL 23451;

This immediately frees the connection slot.

Step 4 - Increase MySQL Connection Limit

If the server has sufficient memory, increasing the connection limit can resolve the issue.

Edit the MySQL configuration file.

Common locations include:

/etc/mysql/mysql.conf.d/mysqld.cnf

or

/etc/my.cnf

Open the file:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Add or modify the following line under [mysqld]:

max_connections = 300

Save the file and restart MySQL:

sudo systemctl restart mysql

or on some systems:

sudo systemctl restart mysqld

Then verify:

SHOW VARIABLES LIKE 'max_connections';

Step 5 - Monitor Connection Errors

MySQL tracks aborted or failed connections.

To check:

SHOW GLOBAL STATUS LIKE 'Aborted_connects';

A rapidly increasing number may indicate:

  • application connection issues
  • authentication failures
  • connection pool misconfiguration

Monitoring this metric helps detect early problems before users notice service failures.

Step 6 - Configure Application Connection Pooling

Modern applications should not create a new database connection for every request.

Instead, connection pools reuse existing connections efficiently.

Examples include:

Node.js

mysql2 pool

Python

SQLAlchemy connection pool

Java

HikariCP

Proper pooling dramatically reduces database connection load and prevents spikes.

Step 7 - Adjust MySQL Timeout Settings

Idle connections can accumulate over time. MySQL includes timeout controls to close inactive sessions.

Check current settings:

SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';

Typical production values:

wait_timeout = 60
interactive_timeout = 60

Shorter timeouts ensure unused connections are closed automatically.

After modifying the configuration, restart MySQL.

Step 8 - Enable Connection Monitoring

For long-term stability, connection usage should be monitored continuously.

Important metrics include:

  • Threads_connected
  • Threads_running
  • Max_used_connections
  • Aborted_connects

Check historical peak usage:

SHOW STATUS LIKE 'Max_used_connections';

If this number approaches the configured limit, the server may need capacity tuning.

Step 9 - Optimize Queries and Slow Database Operations

Heavy queries can keep connections active longer than necessary.

Enable the slow query log:

Add to the MySQL configuration:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

Restart MySQL.

Then analyze slow queries to improve performance and reduce connection pressure.

Step 10 - Plan Capacity for High Traffic Environments

On high-traffic platforms, increasing max_connections alone is not enough.

Each connection consumes memory.

Before increasing limits significantly, confirm available RAM.

A simplified estimate:

Memory per connection × max_connections

If the server frequently reaches connection limits, scaling options include:

  • upgrading server memory
  • implementing database replicas
  • using connection proxies such as ProxySQL
  • optimizing application database access

These approaches provide long-term stability for growing workloads.

Final Thoughts

The MySQL Too Many Connections error is usually a symptom of deeper resource or application design issues.

A balanced approach should include:

  • monitoring connection usage
  • tuning MySQL configuration
  • optimizing application connection handling
  • reviewing database performance

When these practices are applied together, MySQL servers remain stable even under heavy workloads.