多年来,我一直使用同一款DB抽象库。但是今天它开始在我的日志中写入这些Notice (8)消息。
应用程序正常工作,但每次脚本连接到数据库时都会记录相同的通知。
我无法想象发生了什么变化。这种情况发生在我的本地开发机上。
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 $
多年来,我一直使用同一款DB抽象库。但是今天它开始在我的日志中写入这些Notice (8)消息。
应用程序正常工作,但每次脚本连接到数据库时都会记录相同的通知。
我无法想象发生了什么变化。这种情况发生在我的本地开发机上。
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 $
如果有人遇到这个问题,请尝试在您的MySQL my.cnf
配置文件中更改/设置wait_timeout
:
wait_timeout=3600
这个配置文件位于/etc/mysql/my.cnf
(Ubuntu/Debian)和/usr/local/mysql/my.cnf
(OSX)。
重新启动mysql服务器,它应该能工作。
// From
PDO::ATTR_PERSISTENT => true
// To
PDO::ATTR_PERSISTENT => false
虽然不太满意,但目前能用。 我正在使用一台非常老旧的个人电脑进行项目开发,因此我猜测问题可能与资源不足有关。
非交互式连接关闭之前服务器等待活动的秒数。
默认值:28800秒((31536000 sec / 1) * (1 hr / 3600 sec) * (1 day / 24 hrs) = 365 days
my.cnf
中检查wait_timeout
,并决定是否需要持久连接。 此外,您必须投入更多精力来使您的应用程序更加强大,以应对已断开的持久连接。 显然,您不希望客户在第二天回来(晚上回家了)并说:“到底发生了什么?!”这可能是因为您的数据包含'utf-8'字符。我曾经遇到过类似的问题,也是由此引起的。
异常:mysql_query():发送1462592字节失败,errno=32 Broken pipe
我使用了
mysql -u username -p database < dump_file # this is bad
我要导入一个包含很多UTF8字符(泰语)的SQL文件,但是我没有为[mysql]设置default-character-set=utf8。因此,数据库中错误编码的数据导致了这个问题。
只需删除 mysqlnd
驱动程序并使用 mysqli
。
是的,mysqlnd
更现代,但稳定性如何呢?
下一条命令可以解决您的问题
apt-get remove php5-mysqlnd
apt-get install php5-pdo-mysql
mysql_*()
、mysqli和PDO API,作为链接libmysqlclient.so的替代方案,这样可以更好地提高内存效率,获取行时可能会有速度提升,因为它具有更紧密的耦合性。mysqlnd似乎没有向PHP代码公开任何API,只有其他扩展可以使用。 - Chinoto Vokro