2011-02-08 19 views
19

Sto costruendo un sito Web con MySQL. Sto usando ROSPO per MySQL e improvvisamente non riesco a collegare al database come sto ottenendo un errore:Come uccidere le connessioni MySQL

"Too many connections"

C'è un modo in Toad for MySQL per visualizzare le connessioni esistenti per essere in grado di ucciderli o semplice chiudere tutte le connessioni tutte insieme?

+1

Se si esegue fuori di connessioni che probabilmente sta facendo qualcosa di sbagliato nel vostro sito web, come non chiude le connessioni in modo corretto. – jishi

risposta

51

No, c'è nessun comando MySQL incorporato per quello. Ci sono vari strumenti e script che lo supportano, puoi uccidere alcune connessioni manualmente o riavviare il server (ma sarà più lento).

Utilizzare SHOW PROCESSLIST per visualizzare tutte le connessioni e KILL l'ID del processo che si desidera eliminare.

È possibile modificare l'impostazione di timeout per far sì che il daemon MySQL interrompa i processi inattivi o aumenti il ​​conteggio delle connessioni. È possibile anche limitare la quantità di connessioni per nome utente, in modo che se il processo continua a comportarsi in modo anomalo, l'unico processo interessato è il processo stesso e nessun altro client nel database viene bloccato.

Se non è possibile connettersi più al server, è necessario sapere che MySQL riserva sempre 1 connessione aggiuntiva per un utente con il privilegio SUPER. A meno che il tuo processo offensivo non sia, per qualche ragione, utilizzando un nome utente con questo privilegio ...

Quindi dopo aver nuovamente accesso al database, è necessario correggere il processo (sito Web) che genera molte connessioni.

+1

Nota, il limite per nome utente è stato introdotto su 5.0.3, quindi se stai eseguendo 4.1 o qualcosa del genere sei sfortunato. – jishi

4

Come sopra menzionato, non esiste un comando speciale per farlo. Tuttavia, se tutte quelle connessioni sono inattive, utilizzare 'flush tables;' è in grado di rilasciare tutte quelle connessioni che non sono attive.

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) 

UTENTE 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

voglio raccomandare controllando i collegamenti per mostrare la connessione massima filo è

show variables like "max_connections"; 

campione

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

Aumentare quindi con l'esempio

set global max_connections = 500; 
+0

Cool, Grazie mille, –

+0

Modifica il file: /etc/mysql/mysql.conf.d/mysqld.cnf Mysql install default: 151 e Max Value: 100.000 Vedi: https://dev.mysql.com/doc/ refman/5.7/it/server-system-variables.html # sysvar_max_connections – Tarik

Problemi correlati