zoukankan      html  css  js  c++  java
  • MySQL_解决ERROR 2006 (HY000) at line XX MySQL server has gone away问题

    参考:http://www.111cn.net/database/mysql/106911.htm

    1、修改mysqld的配置文件my.cnf

    调整max_allowed_packet的值,修改为5M就比较合适了。

    [mysqld]
    port        = 3308
    socket      = /dev/shm/mysqld.sock
    skip-external-locking
    key_buffer_size = 16M
    max_allowed_packet = 10M
    table_open_cache = 64
    sort_buffer_size = 512K
    net_buffer_length = 8K
    read_buffer_size = 256K
    read_rnd_buffer_size = 512K
    myisam_sort_buffer_size = 8M
    

    2、修改[mysqld]中的值

    [mysqldump]
    quick
    max_allowed_packet = 10M
    

    感觉这篇分析的非常详细,可以对参考下

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

    This would have to be one of the most common MySQL error messages that is misleading to the end user developer. The MySQL Manual page confirms the broad range of possible conditions, but offers little to a PHP developer that does not speak MySQL Geek. I am commonly asked to help solve this issue from a developer.

    The problem is that there are several conditions that can cause this error, and a more meaningful explanation to the end user would help in addressing the issue. In general terms, this actually means “Your SQL statement has failed because the connection to the database has been disconnected because of ???”.

    Here are a few common situations and how to check for what “???” is.

    1. Your MySQL server really did go away.

    We can easily check this by looking at the server uptime and the server error log.

    $ mysql -uroot -p -e "show global status like 'uptime';"
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | Uptime        | 68928 |
    +---------------+-------+
    1 row in set (0.04 sec)
    
    $ tail /var/log/mysql/error.log
    130101 22:22:30 InnoDB: Initializing buffer pool, size = 256.0M
    130101 22:22:30 InnoDB: Completed initialization of buffer pool
    130101 22:22:30 InnoDB: highest supported file format is Barracuda.
    130101 22:22:30 InnoDB: 1.1.8 started; log sequence number 63444325509
    130101 22:22:30 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306
    130101 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 events
    130101 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)
    

    In both these cases, the server has been up some time, and there are zero error messages to indicate problems.

    If the MySQL server did go away, was it shutdown or did it crash? The MySQL error log will provide the answers. Generally the mysql daemon (mysqld) will be restarted by the mysqld_safe wrapper process.

    2. The connection timed out

    $ 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    |
    +----------------------------+----------+
    

    These values are relatively sane MySQL defaults. If however you have very short timeouts, you may get this error. Here is just one example.

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

    3. Your SQL statement was killed

    Some systems will proactively kill SQL statements that have been running too long. You can easily check if this may be happening proactively by looking at how many KILL statements have been executed.

    $ mysql -uroot -p -e "show global status like 'com_kill'"
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | Com_kill      | 0     |
    +---------------+-------+
    Not killed this time.
    

    4. Your SQL statement was too large.

    A little harder to test and verify, but MySQL uses a maximum packet site for communications between the server and the client. If this includes large fields (for example BLOB columns), you may be getting a termination of your SQL statement due to size.

    By default this is relatively small.

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

    You can increase, for example to 16M with:

    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)
    

    The good news, is this was the cause for the customer today, and now no more errors!

    Be sure to keep this value during MySQL restarts.

    #my.cnf
    [mysqld]
    max_allowed_packet = 16M
    

    and then , you need restart you mysql server .

  • 相关阅读:
    PostgreSQL几种启动方式测试
    PwoerDesigner 生成数据库时没有中文注释
    Temporary ASP.NET Files没有权限
    Asp.net mvc 存Datetime 取Date
    部署asp.net mvc(Identity)
    01 简单工厂模式
    Asp.net 下拉列表框
    Asp.net 验证码
    底层网络知识详解-最重要的传输层4-套接字socket
    底层网络知识详解-最重要的传输层3-TCP协议下
  • 原文地址:https://www.cnblogs.com/ZhangRuoXu/p/6706443.html
Copyright © 2011-2022 走看看