PDO::__construct(): 发送108个字节失败,错误码为32,连接中断。

8

当我登录到命令行mysql后,就无法再访问任何需要数据库连接的PHP应用程序。这种情况每次都会发生。在我的本地主机上,导致此问题的步骤如下:

Command line:
mysql -u root (no password for localhost)
mysql> 

我在这个时候并不执行或者做任何事情。我使用root加载需要数据库连接的任何页面:

PDO::__construct(): send of 108 bytes failed with errno=32 Broken pipe

如果我退出mysql,页面就会恢复正常,但是当尝试在浏览器标签中同时加载两个页面时,会出现另一个问题,其中一个页面会被破坏,直到页面加载完成,然后我才能刷新。
My.cnf:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

wait_timeout=5000
max_allowed_packet=100m
max_user_connections=1000

你的连接字符串有任何特殊编码吗?你的 MySQL 默认字符集是什么? - Spechal
我不知道这是否有所不同,但你可能希望在max_allowed_packet上使用大写的M - cmorrissey
我已经重新启动了它。自从我在OSX上安装了mysql以来,似乎一直发生这种情况。我检查了我的字符集,它显示为latin1。不确定它是否应该是这样的? - chadpeppers
1
我在Mac上遇到了相同的错误。有解决方案吗? - MagePsycho
显示剩余2条评论
2个回答

3

在MySQL的my.cnf配置文件中设置wait_timeout:

wait_timeout=3600

该配置文件位于/etc/mysql/my.cnf(Ubuntu/Debian)和/usr/local/mysql/my.cnf(OSX),对于Windows系统,该文件位于/location of server bin folder/mysql/my.cnf

重启MySQL服务器并检查是否生效。


2
“Send of X bytes failed with errno=32 Broken pipe”这个错误信息,大部分网上的回复会建议你增加连接的wait_timeout时间。但是这对我们来说没有用。
经过一段时间的努力后,我们猜测可能需要增加max_allowed_packet的值。事实证明,将其提高到500M效果很好。
只有在它已经起作用之后,我们才发现其他人也有类似的经历(例如https://www.somacon.com/p574.php)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接