一个开发MM的项目(PHP+MySQL)的PHP项目今天出现了MySQL server has gone away的错误,MySQL服务器端表示毫无压力。
而通过mysql客户端的连接方式mysql -hxx -uxx -pxx databasename -e xxx则毫无问题
而App服务器的netstat -a | grep 3306 | grep TIME_WAIT个数非常小,只有2个。
MySQL在连接超时这块的参数如下
root@(none) 09:24:51>show variables like '%out%';+------------------------------+----------+| Variable_name | Value |+------------------------------+----------+| connect_timeout | 10 || delayed_insert_timeout | 300 || handlersocket_timeout | 300 || handlersocket_wrlock_timeout | 12 || innodb_lock_wait_timeout | 100 || innodb_rollback_on_timeout | OFF || interactive_timeout | 28800 || lock_wait_timeout | 31536000 || log_output | FILE || net_read_timeout | 30 || net_write_timeout | 60 || slave_net_timeout | 3600 || wait_timeout | 28800 |+------------------------------+----------+
最终MM把PHP连接MySQL的连接方式从长连接改成了短连接,就再没出现了。
后来查了下资料,总结如下
1.MySQL服务器的wait_timeout
参数为默认的28800秒,即8小时。该参数的意思是MySQL等待睡眠的连接的持续时间,如果超过8小时不活动,MySQL就会关闭这个连接。这个参数可以动态修改,但这个参数是session级别的,需要应用重新建立连接获取这个变量值才会生效。
2.PHP的默认php.ini里面,default_socket_timeout参数是默认60s.default_socket_timeout参数的意思是socket超时为60s。 官方解释
3.在MySQL的官方文档里面,有专门的章节介绍MySQL Server has gone away。但并没有提及到客户端本身也会有超时机制,以前曾经试过把wait_timeout
设置为1年,但App还是继续出现MySQL server has gone away的错误。
4.在PHP程序里面,如果php.ini修改起来不方便,可以以下代码来尝试解决。
ini_set('mysql.connect_timeout', 300);ini_set('default_socket_timeout', 300);
在ini_set后,可以用ini_get来验证参数设置适合符合预期。
参考资料
相关推荐
其次,超时问题也是导致MySQL Server has gone away错误的常见原因。MySQL服务器有两组超时设置,`wait_timeout`和`interactive_timeout`。前者针对非交互式连接(如Web应用),后者针对交互式连接(如命令行客户端...
MySQL server has gone away错误通常发生在客户端与MySQL服务器之间的连接突然中断时,这可能是由于多种原因引起的,如超时、请求的数据包过大或者内存资源耗尽等。为了解决这个问题,我们可以采取以下策略: 1. **...
综上所述,处理“MySQL server has gone away”的关键在于理解超时机制和心跳策略,并根据实际情况调整配置或修改代码以实现更稳定的连接管理。同时,监控 MySQL 服务器的状态和 Gearman worker 的运行情况也是防止...
MYSQL server has gone away 引起这个原因是不可怕的.原因是更改了系统的断开时间. mysql>show gloable variables like “%timeout%”; 进行查看 interactive_timeout 的黓认值为28800 wait_timeout 的默认值这:...
2. **MySQL Server Has Gone Away**: 这个错误通常是由于服务器超时关闭连接导致。默认情况下,服务器会在8小时后断开无活动的连接。可以通过设置`wait_timeout`变量在启动mysqld时调整这个时间限制。 3. **无法...
然而,如果将其设置的太小,可能会遭遇到“MySQL has gone away” 之类的问题。 show variables 命令的误解 在使用 show variables 命令时,需要注意的是,这个命令实际上是查询的是会话变量,而不是全局变量。这...
本文将详细讨论两个常见的错误:“MySQL server has gone away”和“Can't connect to [local] MySQL server”。 首先,让我们关注“MySQL server has gone away”错误。这个错误通常意味着服务器在执行查询时超时...
反之,如果设置的过小,可能会遭遇到“MySQL has gone away”之类的问题。 wait_timeout 参数的设置非常重要,因为它直接影响着 MySQL 的性能和稳定性。如果设置的不当,可能会导致连接超时、连接断开、甚至影响到...
在MySQL数据库操作中,有时我们在尝试导入大型SQL脚本时可能会遇到“2006 MySQL server has gone away”的错误。这个错误通常意味着MySQL服务器在执行过程中由于某种原因断开了连接,可能是由于超时、内存限制或者是...
在执行导入操作时,有时会遇到`mysql server has gone away`的错误,这通常是由于数据库大小、超时或者内存不足导致的。为解决这个问题,可以修改MySQL的配置文件`my.cnf`,通常位于`/etc/my.cnf`: 1. 使用`vi`...
长时间运行的脚本可能会遇到MySQL服务器断开连接的问题,通常表现为"MySQL server has gone away"的错误。从DBD::mysql 4.012版本开始,可以通过设置`mysql_auto_reconnect`属性为1来实现自动重连: ```perl $dbh...
3. **错误3:mysql error nr.2006-mysql server has gone away**:此错误通常是由于上传文件大小限制或超时导致的。解决方法是修改MySQL配置文件,如`my.cnf`(Linux)或`my.ini`(Windows),增大`max_allowed_...
5. **MySQL "Server has gone away"问题**:这通常由于数据包过大或超时导致。解决方法是增加`max_allowed_packet`变量的值,如`SET GLOBAL max_allowed_packet=1024*1024*16;`,以允许更大的数据包传输。 6. **...
当连接超过这个时间没有活动,数据库服务器可能会关闭它,如果此时django尝试使用这个连接,就会发生错误,如InterfaceError或者Error(2006, 'MySQL server has gone away')。 为了解决这类问题,可以将django的...