MySQL server has gone away

原因一: MySQL服務宕了

查看mysql的運行時長:

show global status like 'uptime';

輸出:

+---------------+---------+
| Variable_name | Value   |
+---------------+---------+
| Uptime        | 3414707 |
+---------------+---------+

原因二: MySQL連接超時

某個mysql長連接很久沒有新的請求發起,達到了server端的timeout,被server強行關閉。
此後再通過這個connection發起查詢的時候,就會報錯server has gone away
(大部分PHP腳本就是屬於此類)

show global variables like '%timeout';

輸出:

+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| connect_timeout              | 28800    |
| delayed_insert_timeout       | 300      |
| have_statement_timeout       | YES      |
| innodb_flush_log_at_timeout  | 1        |
| innodb_lock_wait_timeout     | 5        |
| innodb_rollback_on_timeout   | OFF      |
| interactive_timeout          | 1800     |
| lock_wait_timeout            | 31536000 |
| net_read_timeout             | 300      |
| net_write_timeout            | 300      |
| rpl_semi_sync_master_timeout | 5000     |
| rpl_stop_slave_timeout       | 31536000 |
| slave_net_timeout            | 60       |
| wait_timeout                 | 1800     |
+------------------------------+----------+

interactive_timeout/wait_timeout 是1800秒,即mysql鏈接在無操作1800秒後被自動關閉

原因三: MySQL請求鏈接進程被主動kill

show global status like 'com_kill';

輸出:

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_kill      | 7     |
+---------------+-------+

原因四: Your SQL statement was too large

當查詢的結果集超過 max_allowed_packet 也會出現這樣的報錯。

show global variables like 'max_allowed_packet';

輸出: 64M

+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 67108864 |
+--------------------+----------+

修改參數:

set global max_allowed_packet=1024*1024*16;

解決方案

在my.cnf文件中添加或者修改以下兩個變量:(需重啓)

wait_timeout=28800
interactive_timeout = 28800

如果不能修改my.cnf,可以執行語句(重啓後失效)

SET GLOBAL interactive_timeout=28800;
SET GLOBAL wait_timeout=28800;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章