服务查询MySQL server has gone away报错原因分析 服务查询

每日一贴,天今的容内关键字为服务查询

    

    在平常和发开的交流 以及 在论坛答复问题的或称中会发明这个问题被问及的率频非常高。

    序程中报错: MySQL server has gone away 是什么意思? 如何防止?

    因此,感到有须要总结一下产生这个问题的因原。天今好正看到一篇外文blog总结的比较好,就翻译过来了

    原文:http://ronaldbradford.com/blog/sqlstatehy000-general-error-2006-mysql-server-has-gone-away-2013-01-02/

    

 

    

因原1. MySQL 服务宕了

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

    $ mysql -uroot -p -e "show global status like 'uptime';"+---------------+-------+| Variable_name | Value |+---------------+-------+| Uptime | 68928 |+---------------+-------+1 row in set (0.04 sec)

    或者看查MySQL的报错志日,看看有没有重启的信息

    $ tail /var/log/mysql/error.log130101 22:22:30 InnoDB: Initializing buffer pool, size = 256.0M130101 22:22:30 InnoDB: Completed initialization of buffer pool130101 22:22:30 InnoDB: highest supported file format is Barracuda.130101 22:22:30 InnoDB: 1.1.8 started; log sequence number 63444325509130101 22:22:30 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306130101 22:22:30 [Note] - '127.0.0.1' resolves to '127.0.0.1';130101 22:22:30 [Note] Server socket created on IP: '127.0.0.1'.130101 22:22:30 [Note] Event Scheduler: Loaded 0 events130101 22:22:30 [Note] /usr/sbin/mysqld: ready for connections.Version: '5.5.28-cll' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server (GPL)

    如果uptime数值很大,明表mysql服务运行了久很了。明说近来服务没有重启过。

    如果志日没有相干信息,也表名mysql服务近来没有重启过,可以续继检查上面几项容内。

    

2. 接连超时

    如果序程应用的是长接连,则种这情况的可能性会比较大。

    即,某个长接连久很没有新的求请发起,达到了server端的timeout,被server强行闭关。

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

    每日一道理
记不清有多少个夜晚,在我翻阅纸张的指间滑落;记不清有多少支蜡烛,在我的凝视中化为灰烬。逝者如斯,我时时刻刻会听见自己对生命承诺的余音,感到岁月的流转在渐渐稀释我的年少无知,我愿自己是一只上足了发条的时钟,在昼夜不停的流转中留下自己充实的每一刻。

    $ mysql -uroot -p -e "show global variables like '%timeout';"+----------------------------+----------+| Variable_name | Value |+----------------------------+----------+| connect_timeout | 30 || delayed_insert_timeout | 300 || innodb_lock_wait_timeout | 50 || innodb_rollback_on_timeout | OFF || interactive_timeout | 28800 || lock_wait_timeout | 31536000 || net_read_timeout | 30 || net_write_timeout | 60 || slave_net_timeout | 3600 || wait_timeout | 28800 |+----------------------------+----------+

    mysql> SET SESSION wait_timeout=5;## Wait 10 secondsmysql> SELECT NOW();ERROR 2006 (HY000): MySQL server has gone awayNo connection. Trying to reconnect...Connection id: 132361Current database: *** NONE ***+---------------------+| NOW() |+---------------------+| 2013-01-02 11:31:15 |+---------------------+1 row in set (0.00 sec)

    

3. 进程在server端被自动kill

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

    $ mysql -uroot -p -e "show global status like 'com_kill'"+---------------+-------+| Variable_name | Value |+---------------+-------+| Com_kill | 0 |+---------------+-------+

    

4. Your SQL statement was too large.

    当查询的结果集超越 max_allowed_packet 也会现出这样的报错。位定法方是打出相干报错的语句。

    用select * into outfile 的式方导出到文件,看查文件大小否是超越 max_allowed_packet ,如果超越则要需调整参数,或者优化语句。

    mysql> show global variables like 'max_allowed_packet';+--------------------+---------+| Variable_name | Value |+--------------------+---------+| max_allowed_packet | 1048576 |+--------------------+---------+1 row in set (0.00 sec)

    修改参数:

    mysql> set global max_allowed_packet=1024*1024*16;mysql> show global variables like 'max_allowed_packet';+--------------------+----------+| Variable_name | Value |+--------------------+----------+| max_allowed_packet | 16777216 |+--------------------+----------+1 row in set (0.00 sec)

 

文章结束给大家分享下程序员的一些笑话语录: 看新闻说中国输入法全球第一!领先了又如何?西方文字根本不需要输入法。一点可比性都没有。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值