1、應用程式(比如php)長時間的執行批量的mysql語句。
最常見的就是採集或者新舊資料轉化。
解決方案:
在my.ini檔案中新增或者修改以下兩個變數:
wait_timeout=2880000
interactive_timeout =2880000
關於兩個變數的具體說明可以google或者看官方手冊。
如果不能修改my.cnf,則可以在連線資料庫的時候設定client_interactive,比如:
sql = "set interactive_timeout=24*3600";
mysql_real_query(...)
2、執行乙個sql,但sql語句過大或者語句中含有blob或者longblob欄位。
比如,資料的處理
解決方案
在my.cnf檔案中新增或者修改以下變數:
max_allowed_packet =10m(也可以設定自己需要的大小)
max_allowed_packet 引數的作用是,用來控制其通訊緩衝區的最大長度。
mysql根據配置檔案會限制server接受的資料報大小。
有時候大的插入和更新會被max_allowed_packet 引數限制掉,導致失敗。
檢視目前配置
show variables like '%max_allowed_packet%';
顯示的結果為:
+--------------------+---------+ | variable_name | value | +--------------------+---------+ | max_allowed_packet | 1048576 | +--------------------+---------+
以上說明目前的配置是:1m
修改方法
可以編輯my.cnf來修改(windows下my.ini),在[mysqld]段或者mysql的server配置段進行修改。
max_allowed_packet = 20m
如果找不到my.cnf可以通過
mysql --help | grep my.cnf
去尋找my.cnf檔案。
(很妥協,很糾結的辦法)
進入mysql server
在mysql 命令列中執行
set global max_allowed_packet = 2*1024*1024*10
然後關閉掉這此mysql server鏈結,再進入。
show variables like '%max_allowed_packet%';
檢視下max_allowed_packet是否編輯成功
mysql資料報 MySQL通訊協議(2)資料報
給每個資料塊加上乙個包頭 由於連線的建立和釋放都需要耗費資源,所以資料庫這種互動頻繁,且連線數量不需要特別大的應用場景,一般使用長連線。使用短連線尚能通過rst判斷資料是否讀完了,而長連線就不能這麼做了,同時由於tcp的特點,資料讀寫會發生拆包 粘包。所以使用長連線傳輸資料,必須通過某種方法把要傳送...
SOCKET通訊中TCP資料報大小的確定
mss maximun segment size 最大分段大小,tcp有乙個最大分段大小,用於通告對端每個分段中能傳送的最大tcp資料量。mss的目的是告訴對端其重組緩衝區大小的實際值,從而避免分片。mss經常設計成mtu減去ip和tcp首部的固定長度。乙太網中使用ipv4mss值為1460,使用i...
UDP傳輸資料報的大小
之前面試被問了,後來查了一下,但是太詳細,有時也不好。1500位元組被稱為鏈路層的mtu 最大傳輸單元 1500 20 8 1472 在普通的區域網環境下,我建議將udp的資料控制在1472位元組以下為好 還有地方說還應該有個ppp的包頭包尾的開銷 8bytes 那就為1492了 udp 包的大小就...