溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL Server has gone away報(bào)錯(cuò)原因有哪些

發(fā)布時(shí)間:2021-11-29 11:04:42 來源:億速云 閱讀:194 作者:柒染 欄目:數(shù)據(jù)庫(kù)

本篇文章為大家展示了MySQL Server has gone away報(bào)錯(cuò)原因有哪些,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

背景

平時(shí)與開發(fā)交流,或在論壇回答問題時(shí),發(fā)現(xiàn)這個(gè)問題被問及的頻率非常高,例如: 程序中報(bào)錯(cuò)“MySQL server has gone away”是什么意思?  如何避免? 因此,感覺有必要總結(jié)一下發(fā)生這個(gè)問題的原因。

正好看到一篇外文blog總結(jié)的比較好,就翻譯過來了,分享給大家。

原因一: MySQL 服務(wù)宕了

判斷是否屬于這個(gè)原因的方法很簡(jiǎn)單,執(zhí)行以下命令,查看mysql的運(yùn)行時(shí)長(zhǎng):

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

或者查看MySQL的報(bào)錯(cuò)日志,看看有沒有重啟的信息:

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

如果uptime數(shù)值很大,表明MySQL服務(wù)運(yùn)行了很久了,說明最近服務(wù)沒有重啟過。  如果日志沒有相關(guān)信息,也說明MySQL服務(wù)最近沒有重啟過,可以繼續(xù)檢查下面幾項(xiàng)內(nèi)容。

原因2:連接超時(shí)

如果程序使用的是長(zhǎng)連接,則這種情況的可能性會(huì)比較大。 即某個(gè)長(zhǎng)連接很久沒有發(fā)起新的請(qǐng)求,達(dá)到了server端的time  out,被server強(qiáng)行關(guān)閉。此后再通過這個(gè)client發(fā)起查詢的時(shí)候,就會(huì)報(bào)錯(cuò)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 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: 進(jìn)程在server端被主動(dòng)kill

這種原因和第2種原因比較相似,只是發(fā)起者是DBA,或者其他job,發(fā)現(xiàn)有長(zhǎng)時(shí)間的慢查詢執(zhí)行kill xxx導(dǎo)致。

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

原因4: Your SQL statement was too large

當(dāng)查詢的結(jié)果集超過 max_allowed_packet 也會(huì)出現(xiàn)這樣的報(bào)錯(cuò),定位方法是打出相關(guān)報(bào)錯(cuò)的語(yǔ)句。 用select*into outfile  的方式導(dǎo)出到文件,查看文件大小是否超過max_allowed_packet,如果超過則需要調(diào)整參數(shù),或者優(yōu)化語(yǔ)句。

mysql> show global variables like 'max_allowed_packet';  +--------------------+---------+  | Variable_name | Value |  +--------------------+---------+  | max_allowed_packet | 1048576 |  +--------------------+---------+  1 row in set (0.00 sec)# 修改參數(shù):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)

上述內(nèi)容就是MySQL Server has gone away報(bào)錯(cuò)原因有哪些,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI