MediaTempleのグリッドサーバー(共有/グリッドホスティング)を使用して、作成中のMySQL / PHPサイトを実行していますが、MySQL接続の1つを閉じていなかったため、サイトでエラーが発生しました。
"Too Many Connections"
手動で接続を閉じるためにどこにもログインできません。
スクリプトまたは他のタイプのコマンドを使用して、開いている接続を閉じる方法はありますか?
私はただ待つべきですか?
MediaTempleのグリッドサーバー(共有/グリッドホスティング)を使用して、作成中のMySQL / PHPサイトを実行していますが、MySQL接続の1つを閉じていなかったため、サイトでエラーが発生しました。
"Too Many Connections"
手動で接続を閉じるためにどこにもログインできません。
スクリプトまたは他のタイプのコマンドを使用して、開いている接続を閉じる方法はありますか?
私はただ待つべきですか?
MySQL にまったくログインできない場合は、おそらくホスティング プロバイダーに連絡して接続を切断する必要があります。
MySQL シェルを使用できる場合は、show processlistコマンドを使用して接続を表示し、killコマンドを使用して接続を削除できます。
残念ながら、SQL接続がハングしたままになる傾向があるのは私の経験です。
やみくもに終端接続に入ることは、この問題を解決する方法ではありません。まず、接続が不足している理由を理解する必要があります。max_connections 設定は、最大/予想されるユーザー数に正しく一致するように選択されていますか? 本当に必要ないのに永続的な接続を使用していますか? 等
十分な権限でコマンドラインにアクセスできる場合は、MySQLサーバーまたはApache(Apacheを使用していると仮定)サーバーを再起動します。おそらく接続が開いたままになっているためです。接続を正常に閉じた後、PHPからの永続的な接続を使用していないことを確認してください(一般的な意見では、パフォーマンスが大幅に向上することはないようですが、経験したように、あらゆる種類の問題があります。場合によっては、PostgreSQLを使用するなど、サイトの速度が大幅に低下することもあります)。
PHP コードとの接続を閉じていることを確認してください。また、/etc/my.cnf で許可される最大接続数を増やすこともできます。
max_connections=500
最後に、mysql プロンプトにログインしてshow status
orと入力show processlist
し、サーバーのさまざまな統計を表示できます。
他のすべてが失敗した場合は、サーバー デーモンを再起動すると、永続的な接続がクリアされます。
まあ、あなたが接続でこっそり侵入できない場合はわかりませんが、たまに侵入できる場合、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"