it-swarm-ja.com

'PDO接続エラー:SQLSTATE [HY000] [2002]ソケットを介してローカルMySQLサーバーに接続できません' /var/run/mysqld/mysqld.sock '

私は得ています

'PDO接続エラー:SQLSTATE [HY000] [2002]ソケットを介してローカルMySQLサーバーに接続できません' /var/run/mysqld/mysqld.sock '

更新と挿入をやりすぎたときにエラーが発生しました。更新が多すぎると、1分あたり20k〜30kのトランザクションを意味します。たとえば、テーブル内の10,000を超えるレコードをバッチ処理しようとすると、このエラーが発生し始めます。

ServerfaultとMySQLのリファレンスドキュメントを検索したところ、sockファイルの場所が無効であるかmysqlサーバーがダウンしているとこのエラーが発生する可能性がありますが、sockファイルのパスはtrueであり、mysqlサーバーは稼働しています。通常、mysqlに接続してクエリを実行できるためです。

接続制限によってこのエラーが発生する可能性はありますか?私の現在のmax_connections変数値は151であり、これは1分あたり10kトランザクションには十分ではない可能性があります。しかし、私が知っているように、mysqlに対して開かれている接続が多すぎると、接続エラーが多すぎて、ソケットエラーを介して接続できません。

アプリケーションを変更して、mysql_connectの代わりにmysql_pconnectを使用するようにしました。 cronジョブを実行して10kレコードを処理しようとするとどうなるかわかりません。

何か考えはありますか?この問題の答えが見つからない場合は、32 GBのRAM、4〜8個のプロセッサを搭載したMySQL用の大きなマシンを入手して、このセットアップを試してみます。

1
Gurkan Oluc

これが発生したときに、システムに速度低下や遅延の兆候が見られますか?もしそうなら、より強力なマシンが役立ちます。そうでない場合は、リクエストの嵐を防ぐデフォルトのセーフガードがおそらくいくつかあります。

詳細については、このバグを参照してください。

http://bugs.mysql.com/bug.php?id=10525

重要なのは、設定することで「バックログ」リクエストをキューに入れるmysqlの機能を上げることです。

back_log = 1000

/etc/mysql/my.cnfファイルの[mysqld]セクションにあります(そしてmysqlを再起動します)。

次に、Linuxでも同じ制限を引き上げます。

Sudo sysctl -w net.core.somaxconn=1024

/etc/sysctl.confを編集して追加することを忘れないでください

net.core.somaxconn=1024

これで問題が解決した場合は最後に、そうでない場合は次の再起動時に元に戻ります。

1
fimbulvetr

これは、SQLによるローカルホストループバックの処理に問題がある可能性があります。代わりに、127.0.0.1またはサーバーの内部IPに接続してみてください。

0
inecrafter