201602261646MySQL 錯誤 got a packet bigger than 'max_allowed_packet' bytes mysql
在 MySQL 預設的 max_allowed_packet 為 1MB ,所以當你匯入的資料有 text、midiumtext 甚至 longtext 時 就會出現「ERROR 1153 (08S01) at line XX: Got a packet bigger than 'max_allowed_packet' bytes」的錯誤。
這時「不是」匯入動作沒做,是匯入到超長資料時會跳出錯誤而中斷,所以可能會建立若干的資料庫進去。
----- 觀察 MySQL 系統參數 --------------------------------------
#mysql -u root -p
Enter password:
mysql> show variables like 'max%';
底下的 max_allowed_packet = 1048576 約等於 1MB
+------------------------------------+---------------------------------+
| Variable_name | Value |
+-------------------------------------+--------------------------------+
| max_allowed_packet | 1048576 |
| max_binlog_cache_size | 18446744073709547520 |
| max_binlog_size | 1073741824 |
| max_connect_errors | 10 |
| max_connections | 151 |
| max_delayed_threads | 20 |
| max_error_count | 64 |
| max_heap_table_size | 16777216 |
| max_insert_delayed_threads | 20 |
| max_join_size | 18446744073709551615 |
| max_length_for_sort_data | 1024 |
| max_long_data_size | 1048576 |
| max_prepared_stmt_count | 16382 |
| max_relay_log_size | 0 |
| max_seeks_for_key | 18446744073709551615 |
| max_sort_length | 1024 |
| max_sp_recursion_depth | 0 |
| max_tmp_tables | 32 |
| max_user_connections | 0 |
| max_write_lock_count | 18446744073709551615 |
+-----------------------------------+----------------------------------+
-----修改方式---------------------------------
方法一:修改設定檔 my.cnf
# sudo vi /etc/my.cnf 增加
[mysqldump]
quick
max_allowed_packet = 100M
# sudo service mysqld restart
方法二:直接給參數,適用於本次執行
# mysql --max_allowed_packet=100M -u root -p < dump_export.sql
↑↑↑↑↑↑ 我上述兩個方法都沒用 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
方法三:進入 mysql 去設定 GLOBAL 參數
# mysql -u root -p
mysql> set global max_allowed_packet = 100000000 ;
mysql> set global max_allowed_packet = 2*1024*1024*10;
mysql> set global max_allowed_packet = 100MB;
/* 上面三種方式都可以,選一種來做就可以 */
/* 沒設定 global 會出現錯誤 ERROR 1621 (HY000): SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value */
但是............ 使用 show variables like 'max%'; 來查卻怎麼都顯示 1048576
不用擔心
mysql> quit
離開再登入一次
#mysql -u root -p
mysql> show variables like 'max%';
就會看到改變了
max_allowed_packet 99999744
這時再執行
# mysql -u root -p < dump_export.sql
就可以匯入長資料了。
~End