mysql通訊的資料報大小

2021-07-25 13:01:31 字數 1481 閱讀 4407

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 包的大小就...