返回首页
当前位置: 主页 > 网络编程 > Php实例教程 >

解决MySQL server has gone away

时间:2013-05-19 22:12来源:知行网www.zhixing123.cn 编辑:麦田守望者

在win下导入mysql的时候报错MySQL server has gone away

由于导入的sql文件大概100w条数据 所以出现了这个错误

解决办法

1.MySQL服务器的wait_timeout参数为默认的28800秒,即8小时。该参数的意思是MySQL等待睡眠的连接的持续时间,如果超过8小时不活动,MySQL就会关闭这个连接。这个参数可以动态修改,但这个参数是session级别的,需要应用重新建立连接获取这个变量值才会生效。这个参数也要设置:interactive_timeout = 2880000

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来验证参数设置适合符合预期。

ps:其他网上关于这个问题的解决办法:

1.讓每次建立 MySQL 連線時都重新建立一條連線

mysql_connect(‘localhost’, $sUser, $sPasswd, TRUE);

也就是 mysql_connect 的第四個參數設定成 TRUE, 這樣每次建立 MySQL 連線時都重新建立一條連線, 以避免前一個 MySQL 連線未結束, 而後來建立的 MySQL 連線取得和前一個MySQL 連線一樣的 PHP resource ID, 這樣會出現 mysql server has gone away 問題.

2.是不是 SQL 命令超過最大長度了?

我們可能為了一些比較特別的存取而兜出一串很長的 SQL 命令, 這時候就可能會發生SQL 命令超過最大長度的問題. 調整 SQL 命令的最大長度可以更改 my.cnf (例如: /etc/my.cnf) 中的 max_allowed_packet 欄位, 將原有數值加大, 例如原本是 max_allowed_packet = 1M, 可以嘗試改成 max_allowed_packet = 10M 以後重跑 MySQL server 後再試一次 (命令: service mysqld stop; service mysqld start). 一般人比較不會是這種情況, 如果無效的話, 請將 max_allowed_packet 設定回原數值, 然後嘗試下一項

顶一下
(0)
0%
踩一下
(0)
0%
标签(Tag):数据库 MYSQL mysql数据库
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片