解决SQLSTATE[HY000]: General error: 2006 MySQL server has gone away问题的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决SQLSTATE[HY000]: General error: 2006 MySQL server has gone away问题的方法相关的知识,希望对你有一定的参考价值。

参考技术A

我有一个脚本需要记录执行时长,开始时写入记录,结束时更新时间。中间无DB交互。

mysql连接量上来时,常发生脚本结束时更新时间不成功的问题。报错如:ERROR 2006 (HY000): MySQL server has gone away。

1:开始时写入记录没问题,排除DB的连接。
2:另一个脚本在执行期间有读表操作,没有出现这个问题。

相关概念 :MySQL连接管理器:连接管理器的作用是管理和维持所有MySQL客户端的请求连接,当我们向MySQL发起请求时,连接管理器会负责创建连接并校验用户的权限。对于已经建立的连接,如果没有太久没有发送请求,连接管理器会自动断开连接,我们可以通过设置变量wait_timeout决定多久断开不活跃的连接。

发送心跳包,每隔5分钟发送一个空包,如\'select 1\'给MySQL,来激活这条连接的状态,说明这个连接正在被使用,不要回收
解决方案1的优势和缺点:
优势是代价小,占用了一个连接,不会由于到时候申请不到连接而出现一致性问题。
缺点是连接数占用了,而且属于闲置状态,造成了资源的浪费,而且如果有其它的业务需求连接,申请不到连接,也会有影响。

开始时写入记录,写完记录把连接close掉(如mysql_close()或者是PDO的$resource=null;),下次再申请一个新的连接用来更新数据。
解决方案2的优势和缺点:
优势是资源得到了释放,如果其他资源需要连接,这个连接可以让出去,让MySQL连接器去回收这个连接。缺点是如果申请的时候连接数满了,日志就记录的不完整。

综合考虑后我选择了方案2,当然这个根据自己的业务需求来定。

enjoy it!

解决WorkBench执行更新语句时1175 SQLSTATE: HY000 (ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE)

Error: 1175 SQLSTATE: HY000 (ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE)
Message: You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.
通常在之行Update语句时出现该问题,在前面加入: SET  SQL_SAFE_UPDATES  = 0 ;
近日在WorkBench下执行时发现可以通过设置[Edit]->[Preferences]->[SQL Editor]下,将 “Safe Updates”.Forbid Updates and Deletes with no key in Where clause or no Limit clause.Requires a reconnection. 前面的checkbox取消选中,保存即可~
注:workbench设置完后需要重新启动一下。

以上是关于解决SQLSTATE[HY000]: General error: 2006 MySQL server has gone away问题的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 SQLSTATE[HY000]: General error: 1824 Failed to open the referenced table in laravel?

php增加用户时出现的【SQLSTATE[HY000] [2002]

关于“WARN: SQL Error: 1366, SQLState: HY000”错误的解决方案

Yosemite 上的 MAMP - 连接错误:SQLSTATE[HY000] [2002] 没有这样的文件或目录

解决mysql的错误 CDbCommand failed to execute the SQL statement: SQLSTATE[HY000]: General error: 1300 Inva

解决WorkBench执行更新语句时1175 SQLSTATE: HY000 (ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE)