2009-12-12 8 views
6

私は何年も同じDB抽象ライブラリを使用してきました。しかし今日、私はこれらのNotice(8)メッセージをログに書き始めました。mysql_pconnect():5バイトの送信がerrno = 32で失敗しました。壊れたパイプ

アプリケーションは正常に動作していますが、スクリプトがDBに接続するたびに同じ通知が記録されます。

変更された可能性はありません。これは私のローカルのマシンで起こっています。

OS X 10.6.2 
PHP 5.3.0 (cli) 
mysql Ver 14.12 Distrib 5.0.87 
mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $ 
+0

コマンドラインユーティリティで接続しようとしましたか? –

+0

mysqldログにも同様の/関連がありますか? – VolkerK

+0

私はmysql cliクライアントの使用に問題はありません。 私が言ったように、mysqlndは接続して接続は動作しますが、今度はこの通知をすべてのpconnect()にスローします。 –

答えて

1

データに「utf-8」文字が含まれている可能性があります。私はそれに起因する同様の問題を持っていました。

例外:するmysql_query():1462592バイトで送信= 32壊れたパイプにerrnoに

を失敗した私は、SQLファイルをインポートする

mysql -u username -p database < dump_file # this is bad 

を使用UTF8文字を多く含む(タイ私は[mysql]に対してdefault-character-set = utf8を設定していませんでした。したがって、データベース内の間違ったコード化されたデータがその問題を引き起こしました。

+0

これは、すべてがutf-8に設定されていても発生します。それにはutf8mb4の使用も含まれます。 PHP 5.6.20でMySQL 5.6を使用していますが、まだ問題があります。私は永続的な接続を実装しようとしたときにそれが始まったことを覚えています。 –

11

誰かがここでは、この問題で苦労している場合は、修正:この設定ファイルは、(/etc/mysql/my.cnfに位置しています

wait_timeout=3600 

はあなたのmysql my.cnf設定ファイルにwait_timeoutを設定/変更してみてくださいUbuntu/Debian)と/usr/local/mysql/my.cnf(OSX)です。

mysqlサーバを再起動するとうまくいくはずです。

0

ただ削除するmysqlndドライバmysqli はいmysqlndより現代的ですが、安定性はどうですか? 次のコマンドは、あなたの問題解決

apt-getののphp5-mysqlndに削除

apt-getをインストールのphp5-PDO-mysqlの

3

私は

を変え、これまでにIS見つけた唯一の解決策
// From 
PDO::ATTR_PERSISTENT => true 
// To 
PDO::ATTR_PERSISTENT => false 

それほど幸せではありませんが、その間に動作します。 私は個人的なプロジェクトのために非常に古いPCを使用していますので、問題がリソースの不足に関係していると推測しています。

+0

私はこれも、永続的な接続を使用しようとしたときに起きたことに気付きました。たぶん私は何かが欠けているでしょう。 –

2

私はPHP 5.6.20、PDO(スロー例外のみ)、および永続的な接続を持つMySQL 5.6.28を使用しています。すべてはutf8mb4です。私のスタック全体は、utf-8(dsn文字列設定、接続、データベースサーバデータベース、テーブル、カラム、Apache 2.4.12、PHP、すべてのWebページ、CSS ...など)用に設定されています。

次のエラーメッセージが断続的に表示され、謎めいて迷惑です。

お知らせ:PDO :: __構築物():5バイトの送信持続的な接続非対話型 1であると仮定すると、ファイル/ fooの/バー/バズでのerrno = 32壊れたパイプで

を失敗しましたMySQL 5.6のマニュアル(5.1.4 Server System Variables)では、サーバシステム変数wait_timeoutについて次のように述べています。

サーバはそれを閉じる前に 非対話型接続のアクティビティを待つ秒数。

デフォルト:28800秒

(28000 sec/1) * (1 hour/3600 sec) = 8 hours

最大:31536000秒したがって

((31536000 sec/1) * (1 hr/3600 sec) * (1 day/24 hrs) = 365 days 

、あなたのmy.cnfwait_timeoutをチェックして、持続的な接続は、何が必要ですかどうかを判断。 また、解消された永続的な接続を考慮に入れてアプリケーションをより堅牢にするために投資する必要があります。明らかに、あなたのクライアントが翌日に戻ってくることを望んでいない(夜間に家に帰ってしまった)、「何なんて!