• 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 .

  • 相关阅读:
    MyBatis的缓存
    16年随笔
    linux 随笔
    Linux下启动Tomcat启动并显示控制台日志信息
    linux 连接工具
    Linux Tomcat重新启动
    SpringMVC 文件上传 MultipartFile
    spring @component
    mysql转型
    MyBatis传入参数
  • 原文地址:https://www.cnblogs.com/ZhangRuoXu/p/6706443.html
Copyright © 2020-2023  润新知