1

MediaTempleのグリッドサーバー(共有/グリッドホスティング)を使用して、作成中のMySQL / PHPサイトを実行していますが、MySQL接続の1つを閉じていなかったため、サイトでエラーが発生しました。

"Too Many Connections"

手動で接続を閉じるためにどこにもログインできません。

スクリプトまたは他のタイプのコマンドを使用して、開いている接続を閉じる方法はありますか?

私はただ待つべきですか?

4

5 に答える 5

1

MySQL にまったくログインできない場合は、おそらくホスティング プロバイダーに連絡して接続を切断する必要があります。

MySQL シェルを使用できる場合は、show processlistコマンドを使用して接続を表示し、killコマンドを使用して接続を削除できます。

残念ながら、SQL接続がハングしたままになる傾向があるのは私の経験です。

于 2008-09-16T03:29:45.070 に答える
1

やみくもに終端接続に入ることは、この問題を解決する方法ではありません。まず、接続が不足している理由を理解する必要があります。max_connections 設定は、最大/予想されるユーザー数に正しく一致するように選択されていますか? 本当に必要ないのに永続的な接続を使用していますか? 等

于 2008-09-16T13:47:28.817 に答える
0

十分な権限でコマンドラインにアクセスできる場合は、MySQLサーバーまたはApache(Apacheを使用していると仮定)サーバーを再起動します。おそらく接続が開いたままになっているためです。接続を正常に閉じた後、PHPからの永続的な接続を使用していないことを確認してください(一般的な意見では、パフォーマンスが大幅に向上することはないようですが、経験したように、あらゆる種類の問題があります。場合によっては、PostgreSQLを使用するなど、サイトの速度が大幅に低下することもあります)。

于 2008-09-16T04:26:06.950 に答える
0

PHP コードとの接続を閉じていることを確認してください。また、/etc/my.cnf で許可される最大接続数を増やすこともできます。

max_connections=500

最後に、mysql プロンプトにログインしてshow statusorと入力show processlistし、サーバーのさまざまな統計を表示できます。

他のすべてが失敗した場合は、サーバー デーモンを再起動すると、永続的な接続がクリアされます。

于 2008-09-16T03:32:17.123 に答える
0

まあ、あなたが接続でこっそり侵入できない場合はわかりませんが、たまに侵入できる場合、Ruby では次のようになります。

require 'mysql'

mysql = Mysql.new(ip, user, pass)
processlist = mysql.query("show full processlist")
killed = 0
processlist.each { | process |
  mysql.query("KILL #{process[0].to_i}")
} 
puts "#{Time.new} -- killed: #{killed} connections"
于 2008-09-16T03:50:09.453 に答える