MySQLでToo many connectionsというエラーが出た場合
MySQLからこんなエラーが出る場合があります。
そんな場合の対処方法を纏めておきます。
Warning: mysql_connect() [function.mysql-connect]: Too many connections in XXX on line XXX
I cannot connect to the database because: Too many connections
なお、ブラウザからアクセスして↑のエラーが出ている場合、phpMyAdminにアクセスをしようとしても↓の様なエラーが出てしまいます。
手っ取り早く解消する方法
レンタルサーバ(Lunarpages)の管理画面にログイン > メニュー > Configuration > Service
mysqldの行のStopをクリック してmysqlを一旦停止します。
そして、Startを実行します。つまり、mysqlのプロセスを強制再起動します。再起動すると強制的にmysqlに繋がりっぱなしになっているプロセスをぶった切ってリセットする事が出来ます。
なお、Serviceで表示されている文字列は「mysqld」と最後に「d」が付いています。これは、mysqlのデーモンです。デーモンとは、UNIX系OS(CentOSなど)のバックグラウンドプロセスの事を表しています。WindowsOSでは、サービスと呼ばれています。
根本的に問題を解決する場合
2点の解消を行います。
1点目:最大接続数を増やす
2点目:1回の接続時間を短くする
mysqlの設定を変更すれば、余程多量のアクセスが無い限りはこの様な問題が起こらなくなります。
SSHでサーバに接続します。今回はLunarpagesにTeraTermでSSH接続しました。Lunarpagesでレンタルサーバを借りると、サーバの中にMySQLもインストールされています。さくらインターネットなどでは、DBサーバが分かれていますが、LunarpagesのDedicate Serverでは一体になっていました。
SSHでサーバに繋がったら
mysql
と入力するとmysqlに繋がります。
max_connectionsの確認 →最大接続数の確認が出来ます。
show global variables like’max_connections’;
wait_timeoutの確認 →接続時間を確認できます。
show global variables like’wait_timeout’;
デフォルトでは、 28,800秒 = 480分 = 8時間・・・とても長い、長すぎます。ここでは、60秒に設定します。
それぞれの数字をメモっておきましょう。
Control + C でmysqlを抜けてサーバ接続状態にします。
winSCPでサーバに接続し
/etc/my.cnf
をローカルのデスクトップにコピーします。
こんな感じに設定しました。
# 接続数
max_connections = 1000
# 待機時間
wait_timeout = 60
編集したらサーバの/etc/my.cnfにアップロードします。
以下コマンドを発行し
sudo service mysqld restart
と出ればMySQLの再起動は完了です。
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
MySQLのデーモンの再起動をしないと設定ファイルを変更しても反映されないので注意しましょう。
そして再び値をチェックします。
最大接続数:1,000
待機時間:60
にしっかり変更されました。
MySQLでエラーが頻発する場合には、この手順をすれば解決されます。
MySQLでステータス確認でたまに使うコマンドのメモ書き
MySQLで現在設定されている最大接続数を確認
show global variables like’max_connections’;
MySQLで現在の接続数を確認
show status like ‘Threads_connected’;
MySQLの累積のコネクション数を確認
show status like ‘Connections’;