2011-02-08 52 views
19

Tôi đang xây dựng một trang web với MySQL. Tôi đang sử dụng TOAD cho MySQL và đột nhiên tôi không thể kết nối với cơ sở dữ liệu khi tôi gặp lỗi:Cách xóa kết nối MySQL

"Too many connections"

Có cách nào trong Toad để xem các kết nối hiện có để có thể tiêu diệt chúng không hoặc đơn giản đóng tất cả các kết nối với nhau?

+1

Nếu bạn đang hết kết nối, có thể bạn đang làm sai điều gì đó trong trang web của mình, như không đóng kết nối đúng cách. – jishi

Trả lời

51

Không, có không có lệnh MySQL tích hợp cho điều đó. Có nhiều công cụ và tập lệnh hỗ trợ nó, bạn có thể giết một số kết nối theo cách thủ công hoặc khởi động lại máy chủ (nhưng điều đó sẽ chậm hơn).

Sử dụng SHOW PROCESSLIST để xem tất cả các kết nối và KILL ID quá trình bạn muốn xóa.

Bạn có thể chỉnh sửa cài đặt thời gian chờ để daemon MySQL tự hủy các quy trình không hoạt động hoặc tăng số lượng kết nối. Bạn thậm chí có thể giới hạn số lượng kết nối cho mỗi tên người dùng, do đó nếu quá trình vẫn hoạt động không đúng, quy trình bị ảnh hưởng duy nhất là quá trình và không có khách hàng nào khác trên cơ sở dữ liệu của bạn bị khóa.

Nếu bạn không thể kết nối chính mình nữa với máy chủ, bạn nên biết rằng MySQL luôn đặt thêm 1 kết nối cho người dùng có đặc quyền SUPER. Trừ khi bạn có thể truy cập lại cơ sở dữ liệu của mình, bạn nên khắc phục quy trình (trang web) đang sinh ra nhiều kết nối.

+1

Lưu ý, giới hạn cho mỗi tên người dùng đã được giới thiệu trên 5.0.3, vì vậy nếu bạn đang chạy 4.1 hoặc một cái gì đó như thế bạn sẽ không may mắn. – jishi

4

Như đã đề cập ở trên, không có lệnh đặc biệt để làm điều đó. Tuy nhiên, nếu tất cả các kết nối đó không hoạt động, hãy sử dụng 'bảng xóa'; có thể giải phóng tất cả các kết nối không hoạt động.

16
mysql> SHOW PROCESSLIST; 
+-----+------+-----------------+------+---------+------+-------+---------------+ 
| Id | User | Host   | db | Command | Time | State | Info  | 
+-----+------+-----------------+------+---------+------+-------+----------------+ 
| 143 | root | localhost:61179 | cds | Query | 0 | init | SHOW PROCESSLIST | 
| 192 | root | localhost:53793 | cds | Sleep | 4 |  | NULL  | 
+-----+------+-----------------+------+---------+------+-------+----------------+ 
2 rows in set (0.00 sec) 

mysql> KILL 192; 
Query OK, 0 rows affected (0.00 sec) 

USER 192:

mysql> SELECT * FROM exept; 
+----+ 
| id | 
+----+ 
| 1 | 
+----+ 
1 row in set (0.00 sec) 

mysql> SELECT * FROM exept; 
ERROR 2013 (HY000): Lost connection to MySQL server during query 
2

Tôi muốn giới thiệu cách kiểm tra các kết nối để hiển thị các kết nối chủ đề tối đa là

show variables like "max_connections"; 

mẫu

+-----------------+-------+ 
| Variable_name | Value | 
+-----------------+-------+ 
| max_connections | 13 | 
+-----------------+-------+ 
1 row in set 

Sau đó, tăng số điện thoại lên bằng cách ví dụ

set global max_connections = 500; 
+0

Cool, Cảm ơn rất nhiều, –

+0

Chỉnh sửa tệp: /etc/mysql/mysql.conf.d/mysqld.cnf Cài đặt mặc định Mysql: 151 và Giá trị lớn nhất: 100.000 Xem: https://dev.mysql.com/doc/ refman/5.7/en/server-system-variables.html # sysvar_max_connections – Tarik

Các vấn đề liên quan