MySQL根據配置文件會限制Server接受的數據包大小。有時候大的插入和更新會受 max_allowed_packet 參數限制,導致大數據寫入或者更新失敗。 通過終端進入mysql控制台,輸入如下命令可以查看max_allowed_packet值的大小: 顯示結果: max_allowed_pa ...
MySQL根據配置文件會限制Server接受的數據包大小。有時候大的插入和更新會受 max_allowed_packet 參數限制,導致大數據寫入或者更新失敗。
通過終端進入mysql控制台,輸入如下命令可以查看max_allowed_packet值的大小:
show VARIABLES like 'max_allowed_packet';
顯示結果:
+--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 1048576 | +--------------------+---------+ 1 row in set (0.01 sec)
max_allowed_packet的單位為位元組(Byte),以上說明目前的配置是1M = 1048576 / 1024 / 1024
修改方法有兩種:
方法1:修改配置文件
可以編輯my.ini(Linux下MySQL的配置文件是my.cnf),在[mysqld]段或者mysql的server配置段進行修改
max_allowed_packet = 20M
修改my.ini,配置要重載才能生效
方法2:執行命令
set global max_allowed_packet = 2*1024*1024*10;
查詢時使用的是show variables的話,發現設置好像並沒有生效,這是因為show variables等同於show session variables,查詢的是會話變數,只有使用show global variables,查詢的才是全局變數。
show global VARIABLES like 'max_allowed_packet';
顯示結果為:
+--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 20971520 | +--------------------+----------+ 1 row in set (0.02 sec)
max_allowed_packet 值設置過小將導致單個記錄超過限制後寫入資料庫失敗,且後續記錄寫入也將失敗,為了數據完整性,需要考慮到事務因素。max_allowed_packet設置過大可能會導致伺服器太忙來不及接收,網路差的時候也可能會出現丟包的現象。
註:如果是5.5以上版本,還需要設置max_long_data_size這個參數,一般和max_allowed_packet一樣即可。