window7 64位系統,MySQL5.7
問題:在使用shell進行數據表更新操作的過程,輸入以下查詢語句:

1 UPDATE bank_detail_train_cp SET Time=FROM_UNIXTIME(CAST(`TimeStamp` AS UNSIGNED)-4500000000,'%Y-%m-%d') WHERE `TimeStamp`!=0;
被查詢的表記錄數達到500W條,在查詢過程中出現如題目所示的問題,提示“lost connection to mysql server during query”,同時電腦上的MySQL服務自動關閉掉。
MySQL官方提供的參考方案 http://dev.mysql.com/doc/refman/5.7/en/error-lost-connection.html
B.5.2.3 Lost connection to MySQL server
通常這是網絡連接問題引起的,如果這種情況頻繁發生,你應該檢查網絡情況。如果錯誤信息包含"during query",這很可能是下述情況引起的:
1、查詢中大量數據被發送,由於數據傳輸時間不夠導致,可以增加net_read_timeout的值。
2、初次連接時,連接時間設定太少,可以增加connect_timeout的值改善。
3、有些少見的情況可以show global status like 'aborted_connets',這個全局變量在每一次服務器終止時會增加1,查看"reading authorization packet"獲取錯誤信息。
4、BLOB值太大的問題,調整配置文件max_allowed_packet。
就更新大量的數據來說,可以進行兩個方面的設置:將系統變量net_read_timeout設置得大一點,再將配置文件中的max_allowed_packet設置大一點。但是問題依然沒有得到解決。可能的原因是這條查詢語句真的太大了,而且我讀的是機械硬盤,所以設置無法滿足。
最終我將這條語句進行了拆分,將500W+的數據拆分成6次更新,問題得到了解決,而且每次更新的時間並不久,這從側面說明了出現上述問題應該是數據傳輸量方面的問題。