To solve the connection limitation and timeout problems of MySQL, first, check and adjust the maximum number of connections, view the current max_connections through SHOW VARIABLES and increase the value appropriately in my.cnf; second, set the wait_timeout and interactive_timeout parameters reasonably to extend the survival time of idle connections; third, optimize the connection behavior of the application side, use the connection pool, release the connection in time, and avoid zombie connections; finally, ensure that the system-level file descriptor limits meet the MySQL connection requirements, modify limits.conf and confirm that they take effect.
MySQL's connection limitations and timeout problems are often pain points that many developers encounter when deploying or maintaining applications. The most common manifestation is the sudden occurrence of "Too many connections" or automatic disconnection of the connection. Although these problems are not complicated, if not handled properly, they will affect system stability. Let’s talk about how to solve and prevent these problems from several key points.

1. View and adjust the maximum number of MySQL connections
The default maximum number of connections in MySQL is usually 151. This number may be used for small projects, but is far from enough for services with more concurrent access.
You can view the current settings through the following command:

SHOW VARIABLES LIKE 'max_connections';
If you find that it is really too small, you can modify the max_connections
value in the configuration file (usually my.cnf
or my.ini
), for example:
[mysqld] max_connections = 500
Then restart MySQL and take effect. But don't set it too high, because each connection will take up memory resources, and excessive increase may lead to exhausting server resources.

2. Reasonably set the connection timeout time
MySQL has several parameters related to connection timeout, the most common ones are wait_timeout
and interactive_timeout
, which control the disconnection time (in seconds) of non-interactive and interactive connections, respectively.
The default value is generally 8 hours (28800 seconds). If your application often has connections disconnected, it may be that this value is too small.
You can view the current settings through the following statement:
SHOW VARIABLES LIKE 'wait_timeout'; SHOW VARIABLES LIKE 'interactive_timeout';
It is recommended to adjust the increase appropriately according to the business scenario, such as changing it to one day (86400 seconds):
[mysqld] wait_timeout = 86400 interactive_timeout = 86400
Restart also needs to take effect. Of course, this doesn't solve all connection problems, it just avoids disconnecting due to being idle for too long.
3. Check and optimize application-side connection behavior
Many times, the connection problem is not caused by the wrong MySQL settings, but by the improper use of the application layer. Common ones are:
- A new connection is created every time you request it, no connection pool is used
- Forgot to close the database connection, causing connection accumulation
- Take up connections for a long time without release
If you are using PHP, Python, Java and other languages, it is recommended to use the connection pooling mechanism, such as:
- Java can use HikariCP and Druid
- Python can use SQLAlchemy's connection pool
- Although PHP is usually automatically released at the end of each request, if a resident process framework (such as Swoole) is used, you need to pay attention to multiplexing connections.
Additionally, it can be run in MySQL:
SHOW PROCESSLIST;
See which connections are currently running and if there are any connections that are in Sleep for a long time. These are often "zombie connections" that have not been released.
4. Cooperate with system-level resource management
The number of connections to MySQL is also limited by operating system levels, such as the maximum number of open files. Because each connection is essentially a socket file descriptor.
You can use the following command to view the current limit:
ulimit -n
If this value is smaller than the number of connections set by MySQL, even if you set max_connections=500, you won't actually use that much. At this time, you need to modify the system limits.conf file, such as:
mysql soft nofile 65536 mysql hard nofile 65536
Also check whether the MySQL startup scripts have these restrictions enabled.
Basically that's it. Reasonably setting the upper limit of connection, controlling timeout time, optimizing application-side behavior, and cooperating with system-level resource restrictions, most connection-related problems can basically be solved. It doesn't seem complicated, but the details are easy to ignore, especially in the early stages of launch.
The above is the detailed content of Managing MySQL Connection Limits and Timeouts. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

TosecurelyconnecttoaremoteMySQLserver,useSSHtunneling,configureMySQLforremoteaccess,setfirewallrules,andconsiderSSLencryption.First,establishanSSHtunnelwithssh-L3307:localhost:3306user@remote-server-Nandconnectviamysql-h127.0.0.1-P3307.Second,editMyS

Turn on MySQL slow query logs and analyze locationable performance issues. 1. Edit the configuration file or dynamically set slow_query_log and long_query_time; 2. The log contains key fields such as Query_time, Lock_time, Rows_examined to assist in judging efficiency bottlenecks; 3. Use mysqldumpslow or pt-query-digest tools to efficiently analyze logs; 4. Optimization suggestions include adding indexes, avoiding SELECT*, splitting complex queries, etc. For example, adding an index to user_id can significantly reduce the number of scanned rows and improve query efficiency.

mysqldump is a common tool for performing logical backups of MySQL databases. It generates SQL files containing CREATE and INSERT statements to rebuild the database. 1. It does not back up the original file, but converts the database structure and content into portable SQL commands; 2. It is suitable for small databases or selective recovery, and is not suitable for fast recovery of TB-level data; 3. Common options include --single-transaction, --databases, --all-databases, --routines, etc.; 4. Use mysql command to import during recovery, and can turn off foreign key checks to improve speed; 5. It is recommended to test backup regularly, use compression, and automatic adjustment.

When handling NULL values ??in MySQL, please note: 1. When designing the table, the key fields are set to NOTNULL, and optional fields are allowed NULL; 2. ISNULL or ISNOTNULL must be used with = or !=; 3. IFNULL or COALESCE functions can be used to replace the display default values; 4. Be cautious when using NULL values ??directly when inserting or updating, and pay attention to the data source and ORM framework processing methods. NULL represents an unknown value and does not equal any value, including itself. Therefore, be careful when querying, counting, and connecting tables to avoid missing data or logical errors. Rational use of functions and constraints can effectively reduce interference caused by NULL.

To view the size of the MySQL database and table, you can query the information_schema directly or use the command line tool. 1. Check the entire database size: Execute the SQL statement SELECTtable_schemaAS'Database',SUM(data_length index_length)/1024/1024AS'Size(MB)'FROMinformation_schema.tablesGROUPBYtable_schema; you can get the total size of all databases, or add WHERE conditions to limit the specific database; 2. Check the single table size: use SELECTta

Character set and sorting rules issues are common when cross-platform migration or multi-person development, resulting in garbled code or inconsistent query. There are three core solutions: First, check and unify the character set of database, table, and fields to utf8mb4, view through SHOWCREATEDATABASE/TABLE, and modify it with ALTER statement; second, specify the utf8mb4 character set when the client connects, and set it in connection parameters or execute SETNAMES; third, select the sorting rules reasonably, and recommend using utf8mb4_unicode_ci to ensure the accuracy of comparison and sorting, and specify or modify it through ALTER when building the library and table.

GROUPBY is used to group data by field and perform aggregation operations, and HAVING is used to filter the results after grouping. For example, using GROUPBYcustomer_id can calculate the total consumption amount of each customer; using HAVING can filter out customers with a total consumption of more than 1,000. The non-aggregated fields after SELECT must appear in GROUPBY, and HAVING can be conditionally filtered using an alias or original expressions. Common techniques include counting the number of each group, grouping multiple fields, and filtering with multiple conditions.

MySQL supports transaction processing, and uses the InnoDB storage engine to ensure data consistency and integrity. 1. Transactions are a set of SQL operations, either all succeed or all fail to roll back; 2. ACID attributes include atomicity, consistency, isolation and persistence; 3. The statements that manually control transactions are STARTTRANSACTION, COMMIT and ROLLBACK; 4. The four isolation levels include read not committed, read submitted, repeatable read and serialization; 5. Use transactions correctly to avoid long-term operation, turn off automatic commits, and reasonably handle locks and exceptions. Through these mechanisms, MySQL can achieve high reliability and concurrent control.
