mysql性能調優之 max_allowed_packet 詳解
一、背景
mysql報錯如下:
SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
二、原因
mysql根據配置文件會限制server接受的數據包大小。
有時候大的插入和更新會被max_allowed_packet 參數限制掉,導致失敗。
三、優化方案
1. 查看當前允許的最大值
mysql> show global variables like '%max_allowed_packet%';
顯示的結果爲:
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.01 sec)
2. 提高packet上限
1) 方法1:永久生效方法
可以編輯my.cnf來修改(windows下my.ini),在[mysqld]段或者mysql的server配置段進行修改。
max_allowed_packet = 20M
如果找不到my.cnf可以通過
mysql --help | grep my.cnf
去尋找my.cnf文件。linux下該文件在/etc/下。
2) 方法2:即時生效方法
進入mysql server,在mysql 命令行中運行,可在不重啓MySQL的情況下立即生效,但是重啓後就會恢復原樣。
mysql> set global max_allowed_packet=1024*1024*16;
然後關閉掉這此mysql server鏈接,再進入。
mysql> show VARIABLES like '%max_allowed_packet%';
查看下max_allowed_packet是否編輯成功