国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL server has gone away問題解決辦法

2024-07-24 12:37:31
字體:
來源:轉載
供稿:網友

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 "show global status like 'uptime';" 
  2. +---------------+-------+ 
  3. | Variable_name | Value | 
  4. +---------------+-------+ 
  5. | Uptime        | 68928 | 
  6. +---------------+-------+ 
  7. 1 row in set (0.04 sec)或者查看MySQL的報錯日志,看看有沒有重啟的信息 
  8. $ tail /var/log/mysql/error.log 
  9. 130101 22:22:30 InnoDB: Initializing buffer pool, size = 256.0M 
  10. 130101 22:22:30 InnoDB: Completed initialization of buffer pool 
  11. 130101 22:22:30 InnoDB: highest supported file format is Barracuda. 
  12. 130101 22:22:30 InnoDB: 1.1.8 started; log sequence number 63444325509 
  13. 130101 22:22:30 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306 
  14. 130101 22:22:30 [Note]   - '127.0.0.1' resolves to '127.0.0.1'
  15. 130101 22:22:30 [Note] Server socket created on IP: '127.0.0.1'
  16. 130101 22:22:30 [Note] Event Scheduler: Loaded 0 events 
  17. 130101 22:22:30 [Note] /usr/sbin/mysqld: ready for connections. 
  18. 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.

  1. $ mysql -uroot -p -e "show global variables like '%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> SET SESSION wait_timeout=5; 
  16. ## Wait 10 seconds 
  17. mysql> SELECT NOW(); 
  18. ERROR 2006 (HY000): MySQL server has gone away 
  19. No connection. Trying to reconnect...  --Vevb.com 
  20. Connection id:    132361 
  21. Current database: *** NONE *** 
  22. +---------------------+ 
  23. | NOW()               | 
  24. +---------------------+ 
  25. | 2013-01-02 11:31:15 | 
  26. +---------------------+ 
  27. 1 row in set (0.00 sec) 

3. 進程在server端被主動kill

這種情況和情況2相似,只是發起者是DBA或者其他job,發現有長時間的慢查詢執行kill xxx導致.

  1. $ mysql -uroot -p -e "show global status like '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 參數的作用是,用來控制其通信緩沖區的最大長度。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成安县| 民乐县| 合山市| 安阳县| 辰溪县| 前郭尔| 桂阳县| 高碑店市| 沅江市| 玉树县| 绥芬河市| 万年县| 虞城县| 沁阳市| 景谷| 山丹县| 含山县| 曲周县| 丹江口市| 巫山县| 大连市| 靖州| 浦东新区| 东乡县| 施秉县| 西乌| 四子王旗| 花莲市| 甘孜| 广宗县| 舟曲县| 慈溪市| 黑山县| 东安县| 高阳县| 崇左市| 赤壁市| 尼玛县| 同仁县| 台南县| 连南|