46

多くの接続が開いていて、長い間 (たとえば 5 分間) アイドル状態になっていることがわかります。

mysqlサービスを再起動せずにサーバーから終了/閉じる解決策はありますか?

レガシー PHP システムを維持していますが、クエリを実行するために確立された接続を閉じることができません。

デフォルトの 8 時間に設定されている my.cnf ファイルのタイムアウト値を減らす必要がありますか?

# default 28800 seconds

interactive_timeout=60
wait_timeout=60
4

2 に答える 2

72

手動クリーンアップ:

プロセス ID を KILL できます。

mysql> show full processlist;
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+
| Id      | User       | Host              | db   | Command | Time  | State | Info                  |
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+
| 1193777 | TestUser12 | 192.168.1.11:3775 | www  | Sleep   | 25946 |       | NULL                  |
+---------+------------+-------------------+------+---------+-------+-------+-----------------------+

mysql> kill 1193777;

しかし:

  • PHP アプリケーションがエラーを報告する場合があります (または Web サーバー、エラー ログを確認してください)。
  • 壊れていないものは修正しないでください。接続が不足していない場合は、そのままにしておいてください。

自動クリーナーサービス;)

または、より短いタイムアウトを設定して mysql-server を構成しwait_timeoutinteractive_timeout

mysql> show variables like "%timeout%";
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| connect_timeout          | 5     |
| delayed_insert_timeout   | 300   |
| innodb_lock_wait_timeout | 50    |
| interactive_timeout      | 28800 |
| net_read_timeout         | 30    |
| net_write_timeout        | 60    |
| slave_net_timeout        | 3600  |
| table_lock_wait_timeout  | 50    |
| wait_timeout             | 28800 |
+--------------------------+-------+
9 rows in set (0.00 sec)

以下で設定:

set global wait_timeout=3;
set global interactive_timeout=3;

(また、サーバーの再起動時に設定ファイルに設定します)

しかし、あなたは根本的な原因ではなく症状を治療しています - なぜ接続が開いているのですか? PHP スクリプトが終了したら、閉じてはいけませんか? ウェブサーバーが接続プールを使用していないことを確認してください...

于 2010-11-26T09:55:34.027 に答える