錯誤:MySQL server has gone away
解決辦法:
1、參數作用
max_allowed_packet參數是指mysql服務器端和客戶端在一次傳送數據包的過程當中最大允許的數據包大小。如果超過了設置的最大長度,則會數據庫保持數據失敗。
2、問題場景
● 有時候業務的需要,可能會存在某些字段數據長度非常大(比如富文本編輯器裏面的內容),造成插入和更新數據庫會被max_allowed_packet 參數限制掉,導致數據庫操作失敗。
● 將本地數據庫遷移到遠程數據庫時運行sql錯誤。錯誤信息是max_allowed_packet
會看到如下的報錯信息:
Packet for query is too large (20682943>1048576). You can change this value on the server by setting the max_allowed_packet’ variable.
這個時候需要設置max_allowed_packet參數的大小,從而滿足業務數據的保存,當然設置的大小要根據實際的業務需要,並不是越大越好,要設置合理的數據長度。
3、查詢當前數據庫設置的大小
查詢當前數據庫設置情況,下面兩種查詢SQL均可以
show variables like ‘%max_allowed_packet%’;
select @@max_allowed_packet;
set global max_allowed_packet = 500 * 500 * 1024;
4、如何調整配置
4.1 通過修改配置文件,需要重啓mysql(推薦)
● Linux 操作系統 修改my.cnf 文件
vim /etc/my.cnf
[mysqld]
max_allowed_packet = 100M
● Windows 5.7解壓版一般都是修改 my.ini 文件
[mysqld]
max_allowed_packet = 128M
4.2 命令行方式(不推薦)
mysql> set global max_allowed_packet = 100 * 1024 * 1024;
mysql> exit
[root@localhost opt]#
[root@localhost opt]# mysql -uroot
mysql>
mysql> select @@max_allowed_packet;
+----------------------+
| @@max_allowed_packet |
+----------------------+
| 104857600 |
+----------------------+
1 row in set (0.00 sec)
mysql>
注意: