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

回應
Google Search
Google
平均分數:0 顆星
投票人數:0
我要評分:
Google