1. 程式人生 > >mysql匯入大批量資料出現MySQL server has gone away的解決方法

mysql匯入大批量資料出現MySQL server has gone away的解決方法

因工作需要,需要匯入一個200M左右的sql到user庫

執行命令

mysql> use user
Database changed
mysql> source /tmp/user.sql

匯入的過程中出現MySQL server has gone away錯誤,資料匯入失敗。

錯誤資訊如下:

ERROR 2006 (HY000): MySQL server has gone away
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    11
Current database: user ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 12 Current database: user ERROR 2006 (HY000): MySQL server has gone away ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 13 Current database: user

開始以為是超時導致,因此調大了 connect_timeoutwait_timeout 的值。

重新執行後問題依舊。


解決方法:

檢視資料,發現了 max_allowed_packet 引數,
官方解釋是適當增大 max_allowed_packet 引數可以使client端到server端傳遞大資料時,系統能夠分配更多的擴充套件記憶體來處理。

檢視mysql max_allowed_packet的值

mysql> show global variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 4194304 | +--------------------+---------+

可以看到是4M,然後調大為256M(1024*1024*256)

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

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

修改後執行匯入,一切正常,解決問題。


注意:
使用set global命令修改 max_allowed_packet 的值,重啟mysql後會失效,還原為預設值。

如果想重啟後不還原,可以開啟 my.cnf 檔案,新增 max_allowed_packet = 256M 即可。