MySQLを使用してWebサイトを構築しています。 TOAD for MySQLを使用していますが、エラーが発生しているため、突然データベースに接続できません。
"接続が多すぎます"
Toad for MySQLに既存の接続を表示してそれらを強制終了したり、すべての接続を単純に閉じたりする方法はありますか?
いいえ、組み込みのMySQLコマンドはありませんがあります。それをサポートするさまざまなツールとスクリプトがあり、いくつかの接続を手動で強制終了したり、サーバーを再起動したりできます(ただし、速度は遅くなります)。
つかいます SHOW PROCESSLIST
はすべての接続を表示し、KILL
は終了するプロセスIDです。
タイムアウト設定を編集して、MySQLデーモンに非アクティブなプロセス自体を強制終了させるか、接続数を増やすことができます。 ユーザー名あたりの接続数を制限するを使用することもできます。したがって、プロセスが誤動作を続ける場合、影響を受けるプロセスはプロセス自体のみであり、データベース上の他のクライアントはロックアウトされません。
サーバーに自分自身を接続できない場合、MySQLはSUPER
privilegeを持つユーザーに対して常に1つの追加の接続を予約することを知っておく必要があります。問題のプロセスが何らかの理由でその特権を持つユーザー名を使用している場合を除き...
その後、データベースに再度アクセスできるようになったら、その数の接続を生成しているプロセス(Webサイト)を修正する必要があります。
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)
ユーザー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
最大スレッド接続が表示されるように接続を確認することをお勧めします
show variables like "max_connections";
サンプル
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 13 |
+-----------------+-------+
1 row in set
次に例で増やします
set global max_connections = 500;
前述のように、特別なコマンドはありません。ただし、これらの接続がすべて非アクティブな場合は、「フラッシュテーブル」を使用します。アクティブでないすべての接続を解放できます。
MySQL Workbenchの場合:
左側のナビゲーター>管理>クライアント接続
クエリと接続を強制終了するオプションを提供します。
注:これは、OPが尋ねたようなTOADではありませんが、私のようなMySQL Workbenchユーザーはここで終わるかもしれません