MySQL server has gone away報(bào)錯原因分析

在執(zhí)行一個sql文件時(shí)mysql -h 127.0.0.1 -uroot study -e"source b.sql"骤肛,報(bào)錯MySQL server has gone away捂刺。上網(wǎng)查解決辦法俏站,按照網(wǎng)上的解決方法一步步操作,最終找到原因并且解決了,覺得有必要總結(jié)下這個問題發(fā)生的原因及解決辦法,避免后面再繼續(xù)踩坑手负。

情況1. MySQL服務(wù)宕機(jī)

執(zhí)行以下命令,查看mysql的運(yùn)行時(shí)長姑尺。

mysql> show global status like 'uptime';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime        | 10170 |
+---------------+-------+

uptime數(shù)值很大竟终,表明mysql服務(wù)運(yùn)行很久,說明最近MySQL服務(wù)器沒有重啟過切蟋。

或者查看MySQL的報(bào)錯日志统捶,看看有沒有重啟的信息。

datou:~$ tail /var/log/mysql/error.log
170914 19:44:37 InnoDB: Completed initialization of buffer pool
170914 19:44:37 InnoDB: highest supported file format is Barracuda.
170914 19:44:37  InnoDB: Waiting for the background threads to start
170914 19:44:38 InnoDB: 5.5.57 started; log sequence number 58681764
170914 19:44:38 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306
170914 19:44:38 [Note]   - '127.0.0.1' resolves to '127.0.0.1';
170914 19:44:38 [Note] Server socket created on IP: '127.0.0.1'.
170914 19:44:38 [Note] Event Scheduler: Loaded 0 events
170914 19:44:38 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.57-0ubuntu0.14.04.1'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)

如果日志沒有相關(guān)信息柄粹,也表明mysql服務(wù)最近沒有重啟過喘鸟,可以繼續(xù)檢查下面幾項(xiàng)情況。

情況2. 連接超時(shí)

如果程序使用的是長連接驻右,則這種情況的可能性會比較大什黑。
即,某個長連接很久沒有新的請求發(fā)起旺入,達(dá)到了server端的timeout兑凿,被server強(qiáng)行關(guān)閉。
此后再通過這個connection發(fā)起查詢的時(shí)候茵瘾,就會報(bào)錯server has gone away礼华。

mysql> show global variables like '%timeout';
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| connect_timeout            | 10       |
| 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    |
+----------------------------+----------+
10 rows in set (0.00 sec)

如下命令設(shè)置連接超時(shí)為5秒。

mysql> SET SESSION wait_timeout=5;
Query OK, 0 rows affected (0.00 sec)

再執(zhí)行SELECT NOW();拗秘,通過這個connection發(fā)起查詢的時(shí)候圣絮,就會報(bào)錯server has gone away。

mysql> SELECT NOW();
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    41
Current database: study

+---------------------+
| NOW()               |
+---------------------+
| 2017-09-14 23:12:53 |
+---------------------+
1 row in set (0.01 sec)

實(shí)際上wait_timeout=28800雕旨,不是造成文章開頭的原因扮匠。

情況3. 進(jìn)程在server端被主動kill

這種情況和情況2相似,只是發(fā)起者是DBA或者其他job凡涩。發(fā)現(xiàn)有長時(shí)間的慢查詢執(zhí)行kill xxx導(dǎo)致棒搜。

mysql> show global status like 'com_kill';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_kill      | 0     |
+---------------+-------+
1 row in set (0.00 sec)

情況4. Your SQL statement was too large.

當(dāng)查詢的結(jié)果集超過 max_allowed_packet 也會出現(xiàn)這樣的報(bào)錯。
查看執(zhí)行SQL執(zhí)行文件大小是否超過 max_allowed_packet 活箕,如果超過則需要調(diào)整參數(shù)力麸,或者優(yōu)化語句。

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

計(jì)算發(fā)現(xiàn)SQL執(zhí)行文件最大只能是16M,而文章開頭執(zhí)行的a.sql有24M克蚂。
修改參數(shù)闺鲸,max_allowed_packet 調(diào)整為28M。

mysql> set global max_allowed_packet=1024*1024*28;
Query OK, 0 rows affected (0.00 sec)

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

重新再執(zhí)行`mysql -h 127.0.0.1 -uroot study -e"source b.sql"``成功埃叭,說明原因是情況4造成的摸恍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赤屋,隨后出現(xiàn)的幾起案子立镶,更是在濱河造成了極大的恐慌,老刑警劉巖益缎,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谜慌,死亡現(xiàn)場離奇詭異,居然都是意外死亡莺奔,警方通過查閱死者的電腦和手機(jī)欣范,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來令哟,“玉大人恼琼,你說我怎么就攤上這事∑粮唬” “怎么了晴竞?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長狠半。 經(jīng)常有香客問我噩死,道長,這世上最難降的妖魔是什么神年? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任已维,我火速辦了婚禮,結(jié)果婚禮上已日,老公的妹妹穿的比我還像新娘垛耳。我一直安慰自己,他們只是感情好飘千,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布堂鲜。 她就那樣靜靜地躺著,像睡著了一般护奈。 火紅的嫁衣襯著肌膚如雪缔莲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天霉旗,我揣著相機(jī)與錄音酌予,去河邊找鬼磺箕。 笑死,一個胖子當(dāng)著我的面吹牛抛虫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播简僧,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼建椰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了岛马?” 一聲冷哼從身側(cè)響起棉姐,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎啦逆,沒想到半個月后伞矩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夏志,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年乃坤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沟蔑。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡湿诊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘦材,到底是詐尸還是另有隱情厅须,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布食棕,位于F島的核電站朗和,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏簿晓。R本人自食惡果不足惜眶拉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抢蚀。 院中可真熱鬧镀层,春花似錦、人聲如沸皿曲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屋休。三九已至坞古,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劫樟,已是汗流浹背痪枫。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工织堂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奶陈。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓易阳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吃粒。 傳聞我的和親對象是個殘疾皇子潦俺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容