北京SEO

MySQL server has gone away问题解决办法

2019/10/10/17:36:05  阅读:6159  来源:谷歌SEO算法  标签: Safari浏览器

MySQL服务器出现MySQL server has gone away的原因有很多种,但最大的原因是我my.ini中配置问题导致的,下面我来介绍MySQL server has gone away问题解决办法.

执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段,比如,图片数据的处理,都容易引起MySQL server has gone away.

今天遇到类似的情景,MySQL只是冷冷的说,MySQL server has gone away.

后来百度查找发现是mysql设置的问题.

原因1.MySQL 服务宕了

判断是否属于这个原因的方法很简单,执行以下命令,查看mysql的运行时长.

  1. $mysql-uroot-p-e"showglobalstatuslike'uptime';"
  2. +---------------+-------+
  3. |Variable_name|Value|
  4. +---------------+-------+
  5. |Uptime|68928|
  6. +---------------+-------+
  7. 1rowinset(0.04sec)或者查看MySQL的报错日志,看看有没有重启的信息
  8. $tail/var/log/mysql/error.log
  9. 13010122:22:30InnoDB:Initializingbufferpool,size=256.0M
  10. 13010122:22:30InnoDB:Completedinitializationofbufferpool
  11. 13010122:22:30InnoDB:highestsupportedfileformatisBarracuda.
  12. 13010122:22:30InnoDB:1.1.8started;logsequencenumber63444325509
  13. 13010122:22:30[Note]Serverhostname(bind-address):'127.0.0.1';port:3306
  14. 13010122:22:30[Note]-'127.0.0.1'resolvesto'127.0.0.1';
  15. 13010122:22:30[Note]ServersocketcreatedonIP:'127.0.0.1'.
  16. 13010122:22:30[Note]EventScheduler:Loaded0events
  17. 13010122:22:30[Note]/usr/sbin/mysqld:readyforconnections.
  18. Version:'5.5.28-cll'socket:'/var/lib/mysql/mysql.sock'port:3306MySQLCommunityServer(GPL)

如果uptime数值很大,表明mysql服务运行了很久了,说明最近服务没有重启过,如果日志没有相关信息,也表名mysql服务最近没有重启过,可以继续检查下面几项内容.

2.连接超时,如果程序使用的是长连接,则这种情况的可能性会比较大,即,某个长连接很久没有新的请求发起,达到了server端的timeout,被server强行关闭.

此后再通过这个connection发起查询的时候,就会报错server has gone away.

  1. $mysql-uroot-p-e"showglobalvariableslike'%timeout';"
  2. +----------------------------+----------+
  3. |Variable_name|Value|
  4. +----------------------------+----------+
  5. |connect_timeout|30|
  6. |delayed_insert_timeout|300|
  7. |innodb_lock_wait_timeout|50|
  8. |innodb_rollback_on_timeout|OFF|
  9. |interactive_timeout|28800|
  10. |lock_wait_timeout|31536000|
  11. |net_read_timeout|30|
  12. |net_write_timeout|60|
  13. |slave_net_timeout|3600|
  14. |wait_timeout|28800|
  15. +----------------------------+----------+mysql>SETSESSIONwait_timeout=5;
  16. ##Wait10seconds
  17. mysql>SELECTNOW();
  18. ERROR2006(HY000):MySQLserverhasgoneaway
  19. Noconnection.Tryingtoreconnect...--phpfensi.com
  20. Connectionid:132361
  21. Currentdatabase:***NONE***
  22. +---------------------+
  23. |NOW()|
  24. +---------------------+
  25. |2013-01-0211:31:15|
  26. +---------------------+
  27. 1rowinset(0.00sec)

3. 进程在server端被主动kill

这种情况和情况2相似,只是发起者是DBA或者其他job,发现有长时间的慢查询执行kill xxx导致.

  1. $mysql-uroot-p-e"showglobalstatuslike'com_kill'"
  2. +---------------+-------+
  3. |Variable_name|Value|
  4. +---------------+-------+
  5. |Com_kill|0|
  6. +---------------+-------+

1、应用程序(比如PHP)长时间的执行批量的MYSQL语句。

最常见的就是采集或者新旧数据转化.

解决方案:

在my.ini文件中添加或者修改以下两个变量:

wait_timeout=2880000

interactive_timeout = 2880000

关于两个变量的具体说明可以google或者看官方手册,如果不能修改my.cnf,则可以在连接数据库的时候设置CLIENT_INTERACTIVE,比如:

sql = "set interactive_timeout=24*3600";

mysql_real_query(...)

2、执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段,比如,图片数据的处理.

解决方案:在my.cnf文件中添加或者修改以下变量:

max_allowed_packet = 10M (也可以设置自己需要的大小)

max_allowed_packet 参数的作用是,用来控制其通信缓冲区的最大长度。

广告内容

MySQL server has gone away问题解决办法 MySQL server has gone away问题解决办法 MySQL server has gone away问题解决办法

相关阅读

热门评论

木木老贼 木木老贼

互联网营销达人~

总篇数181

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法