萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> 解決ERROR 2006 (HY000) at line XX: MySQL server has gone away問題

解決ERROR 2006 (HY000) at line XX: MySQL server has gone away問題

MySQL server has gone away就是服務器去了的意思,那麼你的mysql數據庫提示MySQL server has gone away了我們主要不是看這個是看什麼導致它去了哦,下面來看看吧。 今天有在解決公司一個客戶網站遷移VPS主機的時候導入數據庫出現"ERROR 2006 (HY000) at line 534: MySQL server has gone away"的錯誤提示問題,一般這樣的問題會發生在數據庫過大,而且配置文件可能限制最大數據庫文件導致的,順帶把解決方法記錄下來,以便於下次有使用的時候直接解決。

第一、找到my.cnf文件

根據不同的服務器配置WEB環境,找到當前服務器中的my.cnf文件,然後需要編輯和修改裡面的配置參數。

第二、修改max_allowed_packet配置參數

修改max_allowed_packet配置參數

修改mysqld和mysqldump中兩處max_allowed_packet參數,盡量將後面的加大一些。

第三、添加wait_timeout

我們需要在上面截圖中的MYSQLD中添加一行wait_timeout = 6000參數。

補充一下個人對wait_timeout 的看法:

wait_timeout過大有弊端,其體現就是MySQL裡大量的SLEEP進程無法及時釋放,拖累系統性能,不過也不能把這個指設置的過小,否則你可 能會遭遇到“MySQL has gone away”之類的問題,通常來說,我覺得把wait_timeout設置為10是個不錯的選擇,但某些情況下可能也會出問題,比如說有一個CRON腳本, 其中兩次SQL查詢的間隔時間大於10秒的話,那麼這個設置就有問題了(當然,這也不是不能解決的問題,你可以在程序裡時不時mysql_ping一下, 以便服務器知道你還活著,重新計算wait_timeout時間):

# vi /etc/my.cnf

[mysqld]
wait_timeout=10

# /etc/init.d/mysql restart

不過這個方法太生硬了,線上服務重啟無論如何都應該盡可能避免,看看如何在MySQL命令行裡通過SET來設置:

mysql> set global wait_timeout=10;

mysql> show global variables like 'wait_timeout';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| wait_timeout               | 10    |
+----------------------------+-------+

這裡一個容易把人搞蒙的地方是如果查詢時使用的是show variables的話,會發現設置好像並沒有生效,這是因為單純使用show variables的話就等同於使用的是show session variables,查詢的是會話變量,只有使用show global variables,查詢的才是全局變量。

網絡上很多人都抱怨說他們set global之後使用show variables查詢沒有發現改變,原因就在於混淆了會話變量和全局變量,如果僅僅想修改會話變量的話,可以使用類似set wait_timeout=10;或者set session wait_timeout=10;這樣的語法。

第四、保存替換和重啟MYSQL

編譯文件之後我們保存文件,然後重啟當前WEB服務器數據庫,然後我們在導入數據庫到是沒有錯誤提示的。

copyright © 萬盛學電腦網 all rights reserved