摘要:直接在上執(zhí)行語(yǔ)句,報(bào)錯(cuò)搜索得知當(dāng)客戶端或服務(wù)器收到大于字節(jié)的信息包時(shí),將發(fā)出信息包過(guò)大錯(cuò)誤,并關(guān)閉連接。對(duì)于某些客戶端,如果通信信息包過(guò)大,在執(zhí)行查詢期間,可能會(huì)遇到丟失與服務(wù)器的連接錯(cuò)誤。
接手了同事的項(xiàng)目,其中有一個(gè)功能是保存郵件模板(包含圖片),同事之前的做法是把圖片進(jìn)行base64編碼然后存在mysql數(shù)據(jù)庫(kù)中(字段類型為mediumtext)
然后保存三張圖片(大概400k)的時(shí)候報(bào)錯(cuò)
MySQL server has gone away
然后查看官方文檔https://dev.mysql.com/doc/ref...
得知可能是以下幾個(gè)原因 服務(wù)器超時(shí) 服務(wù)器斷開 向服務(wù)器發(fā)送不正確或太大的查詢 INSERT或者 REPLACE是插入大量行
開始以為是服務(wù)器超時(shí)導(dǎo)致的,在網(wǎng)上搜的解決辦法(好吧,先試一下 ,發(fā)現(xiàn)還是不行):
true )); ?> Note: 如果想使用持久連接,必須在傳遞給 PDO 構(gòu)造函數(shù)的驅(qū)動(dòng)選項(xiàng)數(shù)組中設(shè)置 PDO::ATTR_PERSISTENT 。如果是在對(duì)象初始化之后用 PDO::setAttribute() 設(shè)置此屬性,則驅(qū)動(dòng)程序?qū)⒉粫?huì)使用持久連接。
直接在Navicat上執(zhí)行sql語(yǔ)句,報(bào)錯(cuò) [Err] 1153 - Got a packet bigger than "max_allowed_packet" bytes
搜索得知:當(dāng)MySQL客戶端或mysqld服務(wù)器收到大于max_allowed_packet字節(jié)的信息包時(shí),將發(fā)出“信息包過(guò)大”錯(cuò)誤,并關(guān)閉連接。對(duì)于某些客戶端,如果通信信息包過(guò)大,在執(zhí)行查詢期間,可能會(huì)遇到“丟失與MySQL服務(wù)器的連接”錯(cuò)誤。
客戶端和服務(wù)器均有自己的max_allowed_packet變量,因此,如你打算處理大的信息包,必須增加客戶端和服務(wù)器上的該變量。一般情況下,服務(wù)器默認(rèn)max-allowed-packet為1MB
這下問(wèn)題精確定位了,就是max_allowed_packet配置的問(wèn)題,
查一下配置 show VARIABLES like "%max_allowed_packet%"; 發(fā)現(xiàn)是1048576(1024*1024),也就是1MB,
但是我的圖片才400K,不應(yīng)該啊,然后網(wǎng)上一查:Base64-encoded 數(shù)據(jù)要比原始數(shù)據(jù)多占用 33% 左右的空間。
還是不確定,直接strlen()返回base64字符串長(zhǎng)度1451334,utf8編碼下英文字符1字符占1字節(jié),所以base64編碼后是1451334B(這個(gè)是我自己的理解),大于1MB
修改max_allowed_packet配置 set global max_allowed_packet = 410241024;
發(fā)現(xiàn)問(wèn)題完美解決
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29182.html
摘要:當(dāng)使用訪問(wèn)數(shù)據(jù)庫(kù)且腳本需要長(zhǎng)時(shí)間執(zhí)行時(shí),頻繁會(huì)遇見的錯(cuò)誤。分析問(wèn)題產(chǎn)生原因因?yàn)槟_本較長(zhǎng)時(shí)間未與數(shù)據(jù)庫(kù)進(jìn)行通信,導(dǎo)致數(shù)據(jù)庫(kù)連接超時(shí)與服務(wù)器斷開連接導(dǎo)致,這時(shí)使用斷開的數(shù)據(jù)庫(kù)連接操作數(shù)據(jù)庫(kù),就會(huì)產(chǎn)生的錯(cuò)誤提示。 當(dāng)PHP 使用PDO訪問(wèn)數(shù)據(jù)庫(kù)且腳本需要長(zhǎng)時(shí)間執(zhí)行時(shí),頻繁會(huì)遇見’ MySQL server has gone away’的錯(cuò)誤。分析問(wèn)題產(chǎn)生原因:因?yàn)槟_本較長(zhǎng)時(shí)間未與數(shù)據(jù)庫(kù)進(jìn)行通...
閱讀 3068·2021-09-22 15:59
閱讀 1319·2021-08-30 09:46
閱讀 2282·2019-08-30 15:54
閱讀 2021·2019-08-26 12:15
閱讀 2547·2019-08-26 12:09
閱讀 1346·2019-08-26 11:57
閱讀 3344·2019-08-23 17:11
閱讀 1893·2019-08-23 15:59